Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите найти ошибку [D7, WinXP]


проня ©   (2008-03-26 10:41:00) 

При компиляции этого кода:

var
 AVPID: array[0..9] of ULONG;
 last: integer;
 h2: THANDLE;
 ph: THANDLE;
 bytesIO: ULONG;
 buf: PSYSINFOBUF;
 i, c: integer;
 cid1: CLIENT_ID;
 attr: OBJECT_ATTRIBUTES;
 csrss_id: THANDLE;
 tmp1: LBuf;
 pBuffer: PROCESSENTRY32W;
 SnapShotHandle: THANDLE;
 tbi: THREAD_BASIC_INFORMATION;
 exists: boolean;
begin
 RTL.EnableSystemPrivilege('SeDebugPrivilege', true);
 last := 0;
 pBuffer.dwSize := sizeof(PROCESSENTRY32W);
 SnapShotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
 if (SnapShotHandle <> INVALID_HANDLE_VALUE) then
   if Process32FirstW(SnapShotHandle, @pBuffer) then
     repeat
       if (pBuffer.szExeFile = 'my.exe') then
       begin
         for i := 0 to 9 do
           exists := (AVPID[i] = pBuffer.th32ProcessID);
         if not exists then
         begin
           AVPID[last] := pBuffer.th32ProcessID;
           inc(last);
         end;
       end;
     until (not Process32NextW(SnapShotHandle, @pBuffer));
 CloseHandle(SnapShotHandle);
 csrss_id := 0;
 pBuffer.dwSize := sizeof(PROCESSENTRY32W);
 SnapShotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
 if (SnapShotHandle <> INVALID_HANDLE_VALUE) then
   if Process32FirstW(SnapShotHandle, @pBuffer) then
     repeat
       ExtractFileNameW(pBuffer.szExeFile, tmp1);
       if (strcmpiW(tmp1, 'csrss.exe') = 0) then
       begin
         csrss_id := pBuffer.th32ProcessID;
         break;
       end;
     until (not Process32NextW(SnapShotHandle, @pBuffer));
 CloseHandle(SnapShotHandle);
 if (csrss_id = 0) then exit;

 attr.Length := sizeof(OBJECT_ATTRIBUTES);
 attr.RootDirectory := 0;
 attr.ObjectName := nil;
 attr.Attributes := 0;
 attr.SecurityDescriptor := nil;
 attr.SecurityQualityOfService := nil;

 cid1.UniqueProcess := csrss_id;
 cid1.UniqueThread := 0;
 if (ZwOpenProcess(@ph, PROCESS_ALL_ACCESS, @attr, @cid1) <> STATUS_SUCCESS) then exit;
 bytesIO := 4194304;
 buf := nil;
 ZwAllocateVirtualMemory(GetCurrentProcess(), @buf, 0, @bytesIO, MEM_COMMIT, PAGE_READWRITE);
 ZwQuerySystemInformation(SystemHandleInformation, buf, 4194304, @bytesIO);
 for c := 0 to buf^.uHandleCount - 1 do
   if (buf^.rHandleTable[c].ProcessId = csrss_id) then
   begin
     if (buf^.rHandleTable[c].ObjectTypeNumber = PsThreadType) then
     begin
       h2 := 0;
       if (ZwDuplicateObject(ph, buf^.rHandleTable[c].Handle, DWORD(-1), @h2,
         0, 0, DUPLICATE_SAME_ACCESS) = STATUS_SUCCESS) then
       begin
         ZwQueryInformationThread(h2, ThreadBasicInformation, @tbi, sizeof(tbi), @bytesIO);
         for i := 0 to last do
           if (tbi.ClientId.UniqueProcess = AVPID[i]) then ZwSuspendThread(h2, nil);
       end;
     end;
   end;
 ZwClose(ph);
 bytesIO := 0;
 ZwFreeVirtualMemory(GetCurrentProcess(), @buf, @bytesIO, MEM_RELEASE);
end;

Отказывается копмилироваться, компилятор ругается на PSYSINFOBUF, CLIENT_ID, OBJECT_ATTRIBUTES. Подключал к проекту TlHelp32 но непомогло, часть ошибок исчезла, а с этими никак не разберусь. Помогите пожалуйста.


Riply   (2008-03-26 11:26:00) [1]

> [0] проня   (26.03.08 10:41)
> Помогите найти ошибку
> Отказывается копмилироваться

А может начать с чтения книжек ?


{RASkov}   (2008-03-26 10:50:00) [2]

> [0] проня   (26.03.08 10:41)


> Помогите найти ошибку

А попробуй сам написать код.... тогда и искать не нужно ничего будет.... будешь сам все знать :)


DrPass   (2008-03-26 10:49:00) [3]

...а разве на ZwOpenProcess, ZwOpenProcess, ZwQuerySystemInformation и т.д. не ругается?


Наверх

Титульная страница Поиск, карта сайта Написать письмо