Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];
ВнизПомогите найти ошибку Найти похожие ветки
← →
проня (2008-03-26 10:41) [0]При компиляции этого кода:
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 но непомогло, часть ошибок исчезла, а с этими никак не разберусь. Помогите пожалуйста.
← →
DrPass © (2008-03-26 10:49) [1]...а разве на ZwOpenProcess, ZwOpenProcess, ZwQuerySystemInformation и т.д. не ругается?
← →
{RASkov} © (2008-03-26 10:50) [2]> [0] проня (26.03.08 10:41)
> Помогите найти ошибку
А попробуй сам написать код.... тогда и искать не нужно ничего будет.... будешь сам все знать :)
← →
Riply © (2008-03-26 11:26) [3]> [0] проня (26.03.08 10:41)
> Помогите найти ошибку
> Отказывается копмилироваться
А может начать с чтения книжек ?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.045 c