bool CPrivilege::GetPrivilegeDetails( LPCTSTR lpctszPrivilegeName_i ) { // Privilege instance to be stored in map SetPrivilegeName( lpctszPrivilegeName_i ); SetPrivilegeEnabled( false ); // Get the friendly display name for a privilege DWORD dwBuffSize = MAX_PATH; TCHAR szPrivBuff[MAX_PATH] = { 0 }; DWORD dwLangId = 0; if( !LookupPrivilegeDisplayName( NULL, GetPrivilegeName(), szPrivBuff, &dwBuffSize, &dwLangId )) { TRACE_ERR( "Failed to get display name for privilege" ); return false; } // Set description of privilege too SetPrivilegeDescription( szPrivBuff ); return true; }// End GetPrivilegeDetails
VOID HsQueryProcessPrivilege(CMyList *m_ListCtrl) { ULONG_PTR ProcessID = g_ulProcessId; ULONG dwReturnSize = 0; ULONG dwRet = 0; PVOID Temp = NULL; ULONG nSize = 1000; if (ProcessID == 0) { return; } m_ListCtrl->DeleteAllItems(); Temp = (PTOKEN_PRIVILEGES)malloc(sizeof(char)*nSize); if (!Temp) { return; } dwRet = DeviceIoControl(g_hDevice,HS_IOCTL(HS_IOCTL_PROC_PROCESSPRIVILEGE), &ProcessID, sizeof(ULONG_PTR), Temp, nSize, &dwReturnSize, NULL); if (dwRet && ((PTOKEN_PRIVILEGES)Temp)->PrivilegeCount > 0) { for (ULONG i = 0; i <((PTOKEN_PRIVILEGES)Temp)->PrivilegeCount;i++) { WCHAR PrivilegeName[MAX_PATH] = {0}; WCHAR DisplayName[MAX_PATH] = {0}; DWORD LanguageId = 0; DWORD dwRet1 = MAX_PATH; DWORD dwRet2 = MAX_PATH; LookupPrivilegeName(NULL, &((PTOKEN_PRIVILEGES)Temp)->Privileges[i].Luid, PrivilegeName, &dwRet1); LookupPrivilegeDisplayName(NULL,PrivilegeName,DisplayName,&dwRet2,&LanguageId); printf("%S\r\n",PrivilegeName); wprintf(L"%s",DisplayName); if (wcslen(PrivilegeName) == 0) { break; } m_ListCtrl->InsertItem(i, PrivilegeName); m_ListCtrl->SetItemText(i,1,DisplayName); if (((PTOKEN_PRIVILEGES)Temp)->Privileges[i].Attributes & 1) { //printf("\t\tDefault Enabled"); m_ListCtrl->SetItemText(i,2,L"Default Enabled"); } else if ( ((PTOKEN_PRIVILEGES)Temp)->Privileges[i].Attributes & 2 ) { //printf("\t\tEnabled"); m_ListCtrl->SetItemText(i,2,L"Enabled"); } else { //printf("\t\tDisabled"); m_ListCtrl->SetItemText(i,2,L"Disabled"); } } } //发送IO 控制码 if (dwRet==0) { //cout<<"Send IoCode Error"<<endl; } if (Temp!=NULL) { free(Temp); } return; }
int main(void) { int i; char user_name[250]; DWORD user_num = 250; char computer_name[250]; DWORD computer_num = 250; if (!GetComputerName( computer_name, &computer_num)) printf("%08x\n", GetLastError()); else printf("Computer: %s\n", computer_name); if (!GetUserName( user_name, &user_num)) printf("%08x\n", GetLastError()); else printf("User: %s\n", user_name); HANDLE h_me = GetCurrentProcess(); HANDLE h_token; /* Use GetKernelObjectSecurity ?*/ OpenProcessToken( h_me, TOKEN_READ, &h_token); TOKEN_USER * ptok_usr = (TOKEN_USER *) malloc( MAXSIZE ); DWORD ret; if (!GetTokenInformation (h_token, TokenUser, ptok_usr, MAXSIZE, &ret)) { print_error(); return; } char * stringsid; if (!ConvertSidToStringSidA( ptok_usr->User.Sid, &stringsid)) { print_error(); return; } printf("Sid: %s\n",stringsid); LocalFree(stringsid); fflush(stdout); getchar(); TOKEN_GROUPS *ptg; // token groups ptg = (TOKEN_GROUPS *) malloc( MAXSIZE ); if ( ! GetTokenInformation( h_token, TokenGroups, ptg, MAXSIZE, &ret ) ) { print_error(); return; } else { if ( ptg->GroupCount == 0 ) printf( "Token groups: (none)\n" ); else { printf( "Token groups:\n" ); for ( i = 0; i < ptg->GroupCount; ++ i ) { char * strsid; if (!ConvertSidToStringSidA( ptg->Groups[i].Sid, &strsid)) { print_error(); return; } printf("Group Sid: %40s",strsid); LocalFree(stringsid); char name[MAXSIZE]; char domain[MAXSIZE]; DWORD i_name=MAXSIZE, i_domain=MAXSIZE; SID_NAME_USE snu; if(!LookupAccountSidA(NULL, ptg->Groups[i].Sid, name, &i_name, domain, &i_domain, &snu)) { print_error(); } else { printf("\t %s\\%s\n", domain, name); } } } } fflush(stdout); getchar(); UCHAR privbuf[1000]; PTOKEN_PRIVILEGES ptgPrivileges = (PTOKEN_PRIVILEGES) privbuf; DWORD privilegeNameSize; DWORD displayNameSize; char privilegeName[500]; char displayName[500]; DWORD langId; if (!GetTokenInformation (h_token, TokenPrivileges, privbuf, sizeof(privbuf), &ret)) { print_error(); return; } printf( "Account privileges: \n\n" ); for( i = 0; i < ptgPrivileges->PrivilegeCount; i ++ ) { privilegeNameSize = sizeof privilegeName; displayNameSize = sizeof displayName; LookupPrivilegeName( NULL, &ptgPrivileges->Privileges[i].Luid, privilegeName, &privilegeNameSize ); LookupPrivilegeDisplayName( NULL, privilegeName, displayName, &displayNameSize, &langId ); printf( "%40s (%s)\n", displayName, privilegeName ); } fflush(stdout); getchar(); return 0; }