2016-06-17 3 views
0

Когда я пытаюсь проверить, использует ли какой-либо процесс защиту выполнения данных (DEP), я получаю ошибку 87 (INVALID_PARAMETER). Я проверил свой код и, похоже, все в порядке, но, к сожалению, у меня все еще такая же ошибка.Ошибка GetProcessDEPPolicy 87

Код:

BOOL var = true; 
DWORD dwPolicy; 

HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, false, 3624); 
if (hProc == NULL) { 
    cout << "Can't open Process because of the error " << GetLastError() << endl; 
} 

if (GetProcessDEPPolicy(hProc, &dwPolicy, 0) != FALSE) { 
    if (dwPolicy == PROCESS_DEP_ENABLE) { 
     cout << "For try.exe process data execution prevention is enabled" << endl; 

    } 
    else if (dwPolicy == NULL) { 
     cout << "For try.exe process data execution prevention is disabled" << endl; 
    } 
    else { 
     cout << "Data is thrunked and we can't change DEP value in future" << endl; 
    } 
} 
else { 
    cout << "There was an error with discovering DEP in try.exe process because of "<<GetLastError() << endl; 
} 

После компиляции и выполнения я получаю:

There was an error with discovering DEP in try.exe process because of 87 
+0

На боковой ноте вы не должны вызывать 'GetProcessDEPPolicy()', если 'OpenProcess()' терпит неудачу. И не забудьте называть 'CloseHandle()' на открытой 'HANDLE'. –

ответ

3

Глядя на документации, функция GetProcessDEPPolicy определяется:

BOOL WINAPI GetProcessDEPPolicy(
    _In_ HANDLE hProcess, 
    _Out_ LPDWORD lpFlags, 
    _Out_ PBOOL lpPermanent 
); 

Обратите внимание, что последний аргумент это параметр out, и это необязательно, но вы передаете 0 aka NULL. Вызов должен быть:

BOOL permanent = FALSE; 
if (GetProcessDEPPolicy(hProc, &dwPolicy, &permanent) != FALSE) { 
+0

Спасибо, это помогло –

Смежные вопросы