#include "precomp.h" #ifdef WINNT32 #include "priv.h" CSid::CSid (): m_hToken (NULL) { if (!OpenThreadToken(GetCurrentThread(), TOKEN_IMPERSONATE, TRUE, &m_hToken)) { DBG_MSG (DBG_LEV_CALLTREE, (_T ("OpenThreadToken failed: %d\n"), GetLastError())); m_bValid = FALSE; } else m_bValid = TRUE; } CSid::~CSid() { if (m_hToken) { CloseHandle (m_hToken); } } BOOL CSid::SetCurrentSid () { #ifdef DEBUG WCHAR UserName[256]; DWORD cbUserName=256; GetUserName(UserName, &cbUserName); DBG_MSG (DBG_LEV_CALLTREE, (_T ("SetCurrentSid BEFORE: user name is %ws\n"), UserName)); #endif NtSetInformationThread(NtCurrentThread(), ThreadImpersonationToken, &m_hToken, sizeof(m_hToken)); #ifdef DEBUG cbUserName = 256; GetUserName(UserName, &cbUserName); DBG_MSG (DBG_LEV_CALLTREE, (_T ("SetCurrentSid AFTER: user name is %ws\n"), UserName)); #endif return TRUE; } #endif