2010. 9. 10. 13:43

DWORD _EnableNTPrivilege()
{
 DWORD dwRtn = 0;
 HANDLE hToken;

 if ( OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
 {
  LUID luid;

  if( LookupPrivilegeValue(NULL, SE_DEBUG_NAME,&luid) )
  {
   BYTE t1[sizeof(TOKEN_PRIVILEGES) + sizeof(LUID_AND_ATTRIBUTES)];
   BYTE t2[sizeof(TOKEN_PRIVILEGES) + sizeof(LUID_AND_ATTRIBUTES)];
   DWORD cbTP = sizeof(TOKEN_PRIVILEGES) + sizeof(LUID_AND_ATTRIBUTES);

   PTOKEN_PRIVILEGES pTP = (PTOKEN_PRIVILEGES)t1;
   PTOKEN_PRIVILEGES pPrevTP = (PTOKEN_PRIVILEGES)t2;

   pTP->PrivilegeCount = 1;
   pTP->Privileges[0].Luid = luid;
   pTP->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

   if( AdjustTokenPrivileges(hToken, FALSE, pTP, cbTP, pPrevTP, &cbTP) )
    dwRtn = pPrevTP->Privileges[0].Attributes;
  }

  CloseHandle(hToken);
 }

 return dwRtn;
}

Posted by 나이스곰