Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.24;
Скачать: CL | DM;

Вниз

Недокументированная QuerySystemInformation   Найти похожие ветки 

 
P   (2011-01-11 20:25) [0]

Нашел интересную вещь, функция возвращает путь к файлу любого процесса вне зависимости от привилегий нашего процесса под Vista и выше

type
 NTSTATUS = Integer;

const
 STATUS_SUCCESS = NTSTATUS($00000000);
 STATUS_INFO_LENGTH_MISMATCH = NTSTATUS($C0000004);

type
 UNICODE_STRING = packed record
   Length,
     MaximumLength: WORD;
   Buffer: PWideChar;
 end;
 TUnicodeString = UNICODE_STRING;
 PUnicodeString = ^TUnicodeString;

 SYSTEM_PROCESS_IMAGE_NAME_INFORMATION = packed record
   ProcessId: Cardinal;
   ImageName: UNICODE_STRING;
 end;
 PSYSTEM_PROCESS_IMAGE_NAME_INFORMATION = ^SYSTEM_PROCESS_IMAGE_NAME_INFORMATION;

type
 TNtQuerySystemInformation = function(SystemInformationClass: LongInt;SystemInformation: Pointer;SystemInformationLength: ULONG; ReturnLength: PDWORD): Integer; stdcall;

var
 NtQuerySystemInformation: TNtQuerySystemInformation;

function _DOSFileName(lpDeviceFileName: PWideChar; var FileName: WideString): Boolean;
var
 lpDeviceName: array[0..1024] of WideChar;
 lpDrive: WideString;
 actDrive: WideChar;
begin
 Result := False;
 FileName := "";
 for actDrive := "A" to "Z" do
 begin
   lpDrive := WideString(actDrive) + ":";
   if (QueryDosDeviceW(PWideChar(lpDrive), lpDeviceName, 1024) <> 0) then
   begin
     if (CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE, lpDeviceName, lstrlenW(lpDeviceName),
       lpDeviceFileName, lstrlenW(lpDeviceName)) = CSTR_EQUAL) then
     begin
       FileName := WideString(lpDeviceFileName);
       Delete(FileName, 1, lstrlenW(lpDeviceName));
       FileName := WideString(lpDrive) + FileName;
       Result := True;
       Break;
     end;
   end;
 end;
end;

function _GetImagePath_Vista(ProcessId: Cardinal): WideString;
var
 ReturnStatus: NTSTATUS;
 ImageNameInformation: SYSTEM_PROCESS_IMAGE_NAME_INFORMATION;
begin
 Result:= "";
 if (@NtQuerySystemInformation = nil) then
   Exit;
 ImageNameInformation.ProcessId := ProcessId;
 ImageNameInformation.ImageName.Length := 0;
 ImageNameInformation.ImageName.MaximumLength := $1000;
 GetMem(ImageNameInformation.ImageName.Buffer, $1000);
 ReturnStatus := NtQuerySystemInformation(88, @ImageNameInformation, SizeOf(ImageNameInformation), nil);
 try
   if ReturnStatus = STATUS_SUCCESS then
     _DOSFileName(ImageNameInformation.ImageName.Buffer, Result);
 finally
   FreeMem(ImageNameInformation.ImageName.Buffer);
   ImageNameInformation.ImageName.Buffer := nil;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 hLibrary: Cardinal;
begin
 hLibrary := LoadLibrary("ntdll.dll");
 if hLibrary <> 0 then
   @NtQuerySystemInformation := GetProcAddress(hLibrary, "NtQuerySystemInformation");
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Caption:= _GetImagePath_Vista(388)
end


 
Ega23 ©   (2011-01-11 20:41) [1]


> Недокументированная QuerySystemInformation


Не хочу тебя разочаровывать, но
http://social.msdn.microsoft.com/Search/ru-RU?query=NtQuerySystemInformation&ac=8


 
Rouse_ ©   (2011-01-11 20:45) [2]

константа 88 при вызове NtQuerySystemInformation - такая секретная :)


 
P   (2011-01-11 20:51) [3]


> Ega23 ©   (11.01.11 20:41) [1]


Я не про саму NtQuerySystemInformation я про константу 88 и про SYSTEM_PROCESS_IMAGE_NAME_INFORMATION

Может пригодиться кому :)


 
Riply ©   (2011-01-12 12:12) [4]

> [3] P   (11.01.11 20:51)
> Я не про саму NtQuerySystemInformation я про константу 88 и про SYSTEM_PROCESS_IMAGE_NAME_INFORMATION
Интересно :)



Страницы: 1 вся ветка

Текущий архив: 2011.04.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1294182094
NailMan
2011-01-05 02:01
2011.04.24
Летающие тряпочки начинают уверенно летать у меня


2-1295032117
Сергей
2011-01-14 22:08
2011.04.24
Вызов функции из функции


15-1294985178
Медвежонок ХМЛ
2011-01-14 09:06
2011.04.24
УЭК


2-1295358908
Сергей
2011-01-18 16:55
2011.04.24
Как запустить окно (winapi) по клику кнопки?


15-1294781400
Юрий
2011-01-12 00:30
2011.04.24
С днем рождения ! 12 января 2011 среда