ObQueryNameString

Тема в разделе "WASM.WIN32", создана пользователем LuckyDevil, 12 май 2005.

  1. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
  2. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F, крыша слетает ((((
    Код (Text):
    1.  
    2. int handle_fobject(PFILE_OBJECT fobject, PUCHAR obuffer)
    3. {
    4.   ULONG length;
    5.   ANSI_STRING astring;
    6.   PUCHAR fname, cur_pointer;
    7.   PFILE_OBJECT related_fobject;
    8.   UCHAR status;
    9.  
    10.   fname=obuffer+12;
    11.   status=0;
    12.    
    13.   if(fobject->DeviceObject!=NULL)
    14.   {
    15.     if(NT_SUCCESS(ObQueryNameString(fobject->DeviceObject,
    16.                   (POBJECT_NAME_INFORMATION)fname,out_size-20,&length)))
    17.     {
    18.       if(NT_SUCCESS(RtlUnicodeStringToAnsiString(&astring,
    19.                                                  (PUNICODE_STRING)fname,TRUE)))
    20.       {
    21.         *fname='\0';
    22.         strncpy(fname, astring.Buffer, astring.Length+1);
    23.         status=1;
    24.  
    25.         fname+=astring.Length;
    26.         *fname='\0';
    27.  
    28.         RtlFreeAnsiString(&astring);
    29.       }
    30.     }
    31.   }
    32.  
    33.   if((length=fobject->FileName.Length>>1)||(fobject->RelatedFileObject!= NULL))
    34.   {
    35.     related_fobject=fobject->RelatedFileObject;
    36.     if(length&&(fobject->FileName.Buffer[0]!='\\'))
    37.       while(related_fobject!=NULL)
    38.       {
    39.         length+=related_fobject->FileName.Length>>1;
    40.         related_fobject=related_fobject->RelatedFileObject;
    41.       }
    42.  
    43.     if(length)
    44.     {
    45.       RtlUnicodeStringToAnsiString(&astring,&(fobject->FileName),TRUE);
    46.       strncpy(cur_pointer=fname+(length-(fobject->FileName.Length>>1)),
    47.               astring.Buffer,astring.Length+1);
    48.       status=1;
    49.       RtlFreeAnsiString(&astring);
    50.  
    51.       related_fobject=fobject->RelatedFileObject;
    52.  
    53.       if(fobject->FileName.Buffer[0]!='\\')
    54.         while(related_fobject!=NULL)
    55.         {
    56.           *(cur_pointer-1)='\\';
    57.           cur_pointer-=(related_fobject->FileName.Length>>1);//+1;
    58.  
    59.           RtlUnicodeStringToAnsiString(&astring,&(related_fobject->FileName),
    60.                                        TRUE);
    61.           strncpy(cur_pointer, astring.Buffer, astring.Length+1);
    62.           status=1;      
    63.           RtlFreeAnsiString(&astring);
    64.  
    65.           related_fobject=related_fobject->RelatedFileObject;
    66.         }
    67.     }
    68.   }
    69.   return(status?(fname-obuffer)+length:0);
    70. }
    71.  


    не дает требуемого результат (((

    кто дельфи знает, может поможете корректно портировать этот код
     
  3. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Код (Text):
    1. function handle_fobject(fobject: PFILE_OBJECT; obuffer: PUCHAR): integer;
    2. var
    3.   length: ULONG;
    4.   astring: ANSI_STRING;//ANSI_STRING;
    5.   fname, cur_pointer: PUCHAR;
    6.   related_fobject: PFILE_OBJECT;
    7.   status: UCHAR;
    8.  
    9. begin
    10.      fname := PUchar(LongInt(obuffer)+12);
    11.      status := 0;
    12.      if(fobject^.DeviceObject <> nil) then
    13.      begin
    14.           if(NT_SUCCESS(ObQueryNameString(fobject^.DeviceObject,
    15.                   POBJECT_NAME_INFORMATION{PUNICODE_STRING}(fname),out_size-20,@length ))) then
    16.           begin
    17.                if(NT_SUCCESS(RtlUnicodeStringToAnsiString(@astring,
    18.                                            PUNICODE_STRING(fname),TRUE))) then
    19.                begin
    20.                     fname^ := 0;
    21.                     strncpy(fname,
    22.                     PUchar(astring.Buffer),
    23.                     astring.Length+1);
    24.                     status := 1;
    25.                     fname := PUchar(LongInt(fname)+astring.Length);
    26.                     fname^ := 0;
    27.                     RtlFreeAnsiString(@astring);
    28.                end;
    29.           end;
    30.      end
    31.      else
    32.      begin
    33.      end;
    34.  
    35.      if((length = fobject^.FileName.Length shr 1)or(fobject^.RelatedFileObject <> nil)) then
    36.      begin
    37.           related_fobject := fobject^.RelatedFileObject;
    38.           if(length>0)and(fobject^.FileName.Buffer[0] <> '\')then
    39.           while(related_fobject <> nil)do
    40.           begin
    41.                length := length + related_fobject^.FileName.Length shr 1;
    42.                related_fobject := related_fobject^.RelatedFileObject;
    43.           end;
    44.           if(length>0)then
    45.           begin
    46.                RtlUnicodeStringToAnsiString(@astring,@(fobject^.FileName),TRUE);
    47.                cur_pointer := PUchar(LongInt(fname)+(length-(fobject^.FileName.Length shr 1)));
    48.                strncpy(cur_pointer,
    49.                        PUchar(astring.Buffer),astring.Length+1);
    50.                status := 1;
    51.                RtlFreeAnsiString(@astring);
    52.                related_fobject := fobject^.RelatedFileObject;
    53.                if(fobject^.FileName.Buffer[0] <> '\')then
    54.                while(related_fobject <> nil)do
    55.                begin
    56.                     //*(cur_pointer-1)='\\';
    57.                     PUchar(LongInt(cur_pointer)-1)^ := byte('\');
    58.                     //cur_pointer-=(related_fobject->FileName.Length>>1);//+1;
    59.                     cur_pointer := PUchar(LongInt(cur_pointer) - related_fobject^.FileName.Length shr 1);
    60.                     RtlUnicodeStringToAnsiString(@astring,@(related_fobject^.FileName),
    61.                                        TRUE);
    62.                     strncpy(cur_pointer, PUchar(astring.Buffer), astring.Length+1);
    63.                     status := 1;
    64.                     RtlFreeAnsiString(@astring);
    65.                     related_fobject := related_fobject^.RelatedFileObject;
    66.                end;
    67.           end;
    68.      end;
    69.      if(status > 0)then Result := (LongInt(fname)-LongInt(obuffer))+length else Result := 0;
    70. end;
    71.  
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Терпеливый ты блин, я максимум что на дельфи писал - это драйвер защищающий процесс от дампа, а потом забил на это дело и перешел на си.

    Если хочешь, шли мне на мыло свои хидеры и исходники драйверов на си и на дельфи, постараюсь помочь.
     
  5. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Я уже понимаю, что всех задалбал ))) этим извратом ))), но коль уж начал , то хотелось бы добить до конца.

    что я имею на данный момент...

    1) код работает;

    2) работает не корректно.

    вот в чем заключается не корректность работы:

    информация полученная от оригинальной версии драйвера:
    Код (Text):
    1. PID: 00000514, Name: StdRedirect.exe, SecID: Administrator\MSVW2KS, Handles: 30
    2.   0004: Section        
    3.   0008: Event          
    4.   000C: Event          
    5.   0010: Event          
    6.   0014: Directory       \KnownDlls
    7.   0018: File            \Device\LanmanRedirector\;E:0\192.168.0.30\f$\e-books\stdexe
    8.   001C: Event          
    9.   0020: Directory       \Windows
    10.   0024: Port            
    11.   0028: Section        
    12.   002C: Event          
    13.   0030: WindowStation   \Windows\WindowStations\WinSta0
    14.   0034: Desktop         \Default
    15.   0038: WindowStation   \Windows\WindowStations\WinSta0
    16.   003C: Key             \REGISTRY\MACHINE
    17.   0040: Directory       \BaseNamedObjects
    18.   0044: Event          
    19.   0048: Key             \REGISTRY\USER\S-1-5-21-1292428093-1935655697-1708537768-500
    20.   004C: Event          
    21.   0050: Event          
    22.   0054: Event          
    23.   0058: Thread          <unknown process>:(000003C8)
    24.   005C: Section         \BaseNamedObjects\InternatSHData
    25.   0060: File            \Device\NamedPipe\Win32Pipes.00000514.00000004
    26.   0064: File            \Device\NamedPipe\Win32Pipes.00000514.00000003
    27.   0068: Process         <unknown process>
    28.   006C: Process         OpHandle.exe(0000025C)
    29.   0070: Thread          OpHandle.exe(0000025C):(000001E4)
    30.   0074: File            \Device\NamedPipe\Win32Pipes.00000514.00000003
    31.   0078: File            \Device\NamedPipe\Win32Pipes.00000514.00000004




    а вот что дает мой драйвер(дельфи):
    Код (Text):
    1.  
    2. PID: 000004E0, Name: StdRedirect.exe, SecID: Administrator\MSVW2KS, Handles: 30
    3.   0004: Section        
    4.   0008: Event          
    5.   000C: Event          
    6.   0010: Event          
    7.   0014: Directory       ls
    8.   0018: File            \Device\LanmanRedirector
    9.   001C: Event          
    10.   0020: Directory      
    11.   0024: Port            
    12.   0028: Section        
    13.   002C: Event          
    14.   0030: WindowStation   \WindowStations\WinSta0
    15.   0034: Desktop        
    16.   0038: WindowStation   \WindowStations\WinSta0
    17.   003C: Key             Y\MACHINE
    18.   0040: Directory       edObjects
    19.   0044: Event          
    20.   0048: Key             Y\USER\S-1-5-21-1292428093-1935655697-1708537768-500
    21.   004C: Event          
    22.   0050: Event          
    23.   0054: Event          
    24.   0058: Thread          <unknown process>:(00000544)
    25.   005C: Section         edObjects\InternatSHData
    26.   0060: File            \Device\NamedPipe
    27.   0064: File            \Device\NamedPipe
    28.   0068: Process         <unknown process>
    29.   006C: Process         OpHandle.exe(00000490)
    30.   0070: Thread          OpHandle.exe(00000490):(00000204)
    31.   0074: File            \Device\NamedPipe
    32.   0078: File            \Device\NamedPipe
    33.  




    как вы видете, идет усечение информации, в мой версии, тут я если честно просто уже плавиться начинаю, так что без посторонней помощи никак.

    а драйвер все-таки работает )))) хоть и не корректно выдает информацию.
     
  6. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
  7. Maveric

    Maveric New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2004
    Сообщения:
    90
    Господа в данный момент меня очень интересует данная тема. Ковыряя дрова Руссиновича, я вроде как разобрался. Но очень хочется взглянуть на исходник, ссылка на который находится выше. К сожалению, она не работает :dntknw: Будьте добры, скиньте файл на мыло maveric_@e-mail.ru

    Заранее спасибо.



    Большое спасибо уже нашёл :)