Доброго времени суток!
Суть проблемы — есть функция, присваивающая процессу (своему) отладочные привилегии. В процессе работы выдает вышеуказанный код ошибки. Как понимаю из описания MSDN — перекрывающаяся операция ввода-вывода. Сам код функции такой:
bool AddDebugPrivileges(bool fEnable)
{
bool fOk = false;
HANDLE hPrivToken;
//отладочная переменная!!
DWORD LastError;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hPrivToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);//error code 997
LastError = GetLastError();
tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(&hPrivToken, FALSE, &tp, sizeof(tp), NULL, NULL);//косяк в хэндле
LastError = GetLastError();
fOk = (GetLastError() == ERROR_SUCCESS);
CloseHandle(hPrivToken);
}
return(fOk);
};
Вызов LookupPrivilegeValue заканчивается той самой ошибкой — и, соответственно, ничего из присвоения привилегий не получается. Отсюда возникает вопрос — что может вызывать такую ошибку?
Если поможет, что вызов функции производится следующим образом:
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <tchar.h>
#include "SysSnap.h"
#include "Output.h"
int main(int argc, CHAR* argv[])
{
HANDLE hSnapHandle; //хэндл снапшота системы.
PROCESSENTRY32 ProcEntry; //сюда бум загонять всю щнягу по процессам
AddDebugPrivileges(true);
if(CreateSnapshot(&hSnapHandle))
{
ProcEntry.dwSize = sizeof(PROCESSENTRY32);
ListAllProcesses(hSnapHandle, &ProcEntry);
}
return 0;
}
29.09.09 13:21: Перенесено модератором из 'C/C++' — Кодт