http://www.wasm.ru/article.php?article=drvw2k11 http://www.osronline.com/article.cfm?id=91 ...или просто погуглить или Вальтера Они открыть...
Four-F, крыша слетает (((( Код (Text): int handle_fobject(PFILE_OBJECT fobject, PUCHAR obuffer) { ULONG length; ANSI_STRING astring; PUCHAR fname, cur_pointer; PFILE_OBJECT related_fobject; UCHAR status; fname=obuffer+12; status=0; if(fobject->DeviceObject!=NULL) { if(NT_SUCCESS(ObQueryNameString(fobject->DeviceObject, (POBJECT_NAME_INFORMATION)fname,out_size-20,&length))) { if(NT_SUCCESS(RtlUnicodeStringToAnsiString(&astring, (PUNICODE_STRING)fname,TRUE))) { *fname='\0'; strncpy(fname, astring.Buffer, astring.Length+1); status=1; fname+=astring.Length; *fname='\0'; RtlFreeAnsiString(&astring); } } } if((length=fobject->FileName.Length>>1)||(fobject->RelatedFileObject!= NULL)) { related_fobject=fobject->RelatedFileObject; if(length&&(fobject->FileName.Buffer[0]!='\\')) while(related_fobject!=NULL) { length+=related_fobject->FileName.Length>>1; related_fobject=related_fobject->RelatedFileObject; } if(length) { RtlUnicodeStringToAnsiString(&astring,&(fobject->FileName),TRUE); strncpy(cur_pointer=fname+(length-(fobject->FileName.Length>>1)), astring.Buffer,astring.Length+1); status=1; RtlFreeAnsiString(&astring); related_fobject=fobject->RelatedFileObject; if(fobject->FileName.Buffer[0]!='\\') while(related_fobject!=NULL) { *(cur_pointer-1)='\\'; cur_pointer-=(related_fobject->FileName.Length>>1);//+1; RtlUnicodeStringToAnsiString(&astring,&(related_fobject->FileName), TRUE); strncpy(cur_pointer, astring.Buffer, astring.Length+1); status=1; RtlFreeAnsiString(&astring); related_fobject=related_fobject->RelatedFileObject; } } } return(status?(fname-obuffer)+length:0); } не дает требуемого результат ((( кто дельфи знает, может поможете корректно портировать этот код
Код (Text): function handle_fobject(fobject: PFILE_OBJECT; obuffer: PUCHAR): integer; var length: ULONG; astring: ANSI_STRING;//ANSI_STRING; fname, cur_pointer: PUCHAR; related_fobject: PFILE_OBJECT; status: UCHAR; begin fname := PUchar(LongInt(obuffer)+12); status := 0; if(fobject^.DeviceObject <> nil) then begin if(NT_SUCCESS(ObQueryNameString(fobject^.DeviceObject, POBJECT_NAME_INFORMATION{PUNICODE_STRING}(fname),out_size-20,@length ))) then begin if(NT_SUCCESS(RtlUnicodeStringToAnsiString(@astring, PUNICODE_STRING(fname),TRUE))) then begin fname^ := 0; strncpy(fname, PUchar(astring.Buffer), astring.Length+1); status := 1; fname := PUchar(LongInt(fname)+astring.Length); fname^ := 0; RtlFreeAnsiString(@astring); end; end; end else begin end; if((length = fobject^.FileName.Length shr 1)or(fobject^.RelatedFileObject <> nil)) then begin related_fobject := fobject^.RelatedFileObject; if(length>0)and(fobject^.FileName.Buffer[0] <> '\')then while(related_fobject <> nil)do begin length := length + related_fobject^.FileName.Length shr 1; related_fobject := related_fobject^.RelatedFileObject; end; if(length>0)then begin RtlUnicodeStringToAnsiString(@astring,@(fobject^.FileName),TRUE); cur_pointer := PUchar(LongInt(fname)+(length-(fobject^.FileName.Length shr 1))); strncpy(cur_pointer, PUchar(astring.Buffer),astring.Length+1); status := 1; RtlFreeAnsiString(@astring); related_fobject := fobject^.RelatedFileObject; if(fobject^.FileName.Buffer[0] <> '\')then while(related_fobject <> nil)do begin //*(cur_pointer-1)='\\'; PUchar(LongInt(cur_pointer)-1)^ := byte('\'); //cur_pointer-=(related_fobject->FileName.Length>>1);//+1; cur_pointer := PUchar(LongInt(cur_pointer) - related_fobject^.FileName.Length shr 1); RtlUnicodeStringToAnsiString(@astring,@(related_fobject^.FileName), TRUE); strncpy(cur_pointer, PUchar(astring.Buffer), astring.Length+1); status := 1; RtlFreeAnsiString(@astring); related_fobject := related_fobject^.RelatedFileObject; end; end; end; if(status > 0)then Result := (LongInt(fname)-LongInt(obuffer))+length else Result := 0; end;
Терпеливый ты блин, я максимум что на дельфи писал - это драйвер защищающий процесс от дампа, а потом забил на это дело и перешел на си. Если хочешь, шли мне на мыло свои хидеры и исходники драйверов на си и на дельфи, постараюсь помочь.
Я уже понимаю, что всех задалбал ))) этим извратом ))), но коль уж начал , то хотелось бы добить до конца. что я имею на данный момент... 1) код работает; 2) работает не корректно. вот в чем заключается не корректность работы: информация полученная от оригинальной версии драйвера: Код (Text): PID: 00000514, Name: StdRedirect.exe, SecID: Administrator\MSVW2KS, Handles: 30 0004: Section 0008: Event 000C: Event 0010: Event 0014: Directory \KnownDlls 0018: File \Device\LanmanRedirector\;E:0\192.168.0.30\f$\e-books\stdexe 001C: Event 0020: Directory \Windows 0024: Port 0028: Section 002C: Event 0030: WindowStation \Windows\WindowStations\WinSta0 0034: Desktop \Default 0038: WindowStation \Windows\WindowStations\WinSta0 003C: Key \REGISTRY\MACHINE 0040: Directory \BaseNamedObjects 0044: Event 0048: Key \REGISTRY\USER\S-1-5-21-1292428093-1935655697-1708537768-500 004C: Event 0050: Event 0054: Event 0058: Thread <unknown process>:(000003C8) 005C: Section \BaseNamedObjects\InternatSHData 0060: File \Device\NamedPipe\Win32Pipes.00000514.00000004 0064: File \Device\NamedPipe\Win32Pipes.00000514.00000003 0068: Process <unknown process> 006C: Process OpHandle.exe(0000025C) 0070: Thread OpHandle.exe(0000025C):(000001E4) 0074: File \Device\NamedPipe\Win32Pipes.00000514.00000003 0078: File \Device\NamedPipe\Win32Pipes.00000514.00000004 а вот что дает мой драйвер(дельфи): Код (Text): PID: 000004E0, Name: StdRedirect.exe, SecID: Administrator\MSVW2KS, Handles: 30 0004: Section 0008: Event 000C: Event 0010: Event 0014: Directory ls 0018: File \Device\LanmanRedirector 001C: Event 0020: Directory 0024: Port 0028: Section 002C: Event 0030: WindowStation \WindowStations\WinSta0 0034: Desktop 0038: WindowStation \WindowStations\WinSta0 003C: Key Y\MACHINE 0040: Directory edObjects 0044: Event 0048: Key Y\USER\S-1-5-21-1292428093-1935655697-1708537768-500 004C: Event 0050: Event 0054: Event 0058: Thread <unknown process>:(00000544) 005C: Section edObjects\InternatSHData 0060: File \Device\NamedPipe 0064: File \Device\NamedPipe 0068: Process <unknown process> 006C: Process OpHandle.exe(00000490) 0070: Thread OpHandle.exe(00000490):(00000204) 0074: File \Device\NamedPipe 0078: File \Device\NamedPipe как вы видете, идет усечение информации, в мой версии, тут я если честно просто уже плавиться начинаю, так что без посторонней помощи никак. а драйвер все-таки работает )))) хоть и не корректно выдает информацию.
Господа в данный момент меня очень интересует данная тема. Ковыряя дрова Руссиновича, я вроде как разобрался. Но очень хочется взглянуть на исходник, ссылка на который находится выше. К сожалению, она не работает Будьте добры, скиньте файл на мыло maveric_@e-mail.ru Заранее спасибо. Большое спасибо уже нашёл