
22.12.2008, 15:35
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами:
9746420
Репутация:
119
|
|
Вот, весь код:
Код:
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#define dwPID 4
void chPriv(int res);
int main(int argc, char* argv[])
{
MODULEENTRY32 mod;
LPVOID lpMsgBuf;
HANDLE snap = INVALID_HANDLE_VALUE;
chPriv(1);
snap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if(snap == INVALID_HANDLE_VALUE)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), 0, (LPTSTR)&lpMsgBuf, 0, NULL);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONERROR);
LocalFree(lpMsgBuf);
return 1;
}
mod.dwSize = sizeof( MODULEENTRY32 );
if( !Module32First(snap, &mod) )
{
printf("Module32First: %d\n", GetLastError());
CloseHandle(snap);
return 1;
}
do
{
printf("%s\t", mod.szModule);
printf("0x%X\n", mod.modBaseAddr);
}
while( Module32Next(snap, &mod));
chPriv(0);
CloseHandle(snap);
getchar();
return 0;
}
void chPriv(int res)
{
HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES priv;
priv.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &priv.Privileges[0].Luid);
if(res)
priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
priv.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, 0, &priv, sizeof(priv), NULL, NULL);
CloseHandle(hToken);
}
}
|
|
|