Enumerating Windows credentials with CredEnumerate function (Windows XP/2003 Only)
2008-05-18 23:28
981 查看
The following code sample enumerates all credentials of the current logged on user, and dump them into the standard output.
First, the CWinCredentials class encapsulates the calls to credentials API functions:
The main function uses the CWinCredentials class to enumerate the credentials of the current logged on user, and dump the information to the standard output:
First, the CWinCredentials class encapsulates the calls to credentials API functions:
class CWinCredentials { protected: typedef BOOL (WINAPI *CredReadFuncType)( LPCTSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIAL *Credential ); typedef BOOL (WINAPI *CredEnumerateType)( LPCTSTR Filter, DWORD Flags, DWORD *Count, PCREDENTIAL **Credentials ); typedef VOID (WINAPI *CredFreeFuncType)(PVOID Buffer); HMODULE hAdvApi32; BOOL bLoaded; CredReadFuncType pCredRead; CredFreeFuncType pCredFree; CredEnumerateType pCredEnumerate; public: CWinCredentials(); ~CWinCredentials(); BOOL LoadCredsLibrary(); void FreeCredsLibrary(); BOOL IsLoaded(); BOOL CredRead( LPCTSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIAL *Credential ); BOOL CredEnumerate( LPCTSTR Filter, DWORD Flags, DWORD *Count, PCREDENTIAL **Credentials ); VOID CredFree(PVOID Buffer); }; |
CWinCredentials::CWinCredentials() { hAdvApi32 = NULL; bLoaded = FALSE; } CWinCredentials::~CWinCredentials() { FreeCredsLibrary(); } BOOL CWinCredentials::IsLoaded() { return bLoaded; } BOOL CWinCredentials::LoadCredsLibrary() { if (bLoaded) return TRUE; hAdvApi32 = LoadLibrary(_T("advapi32.dll")); if (hAdvApi32 != NULL) { //Dynamically load CredRead, CredEnumerate, and CredFree API functions. pCredRead = (CredReadFuncType)GetProcAddress(hAdvApi32, "CredReadW"); pCredFree = (CredFreeFuncType)GetProcAddress(hAdvApi32, "CredFree"); pCredEnumerate = (CredEnumerateType)GetProcAddress(hAdvApi32, "CredEnumerateW"); //If all 3 functions are available, return TRUE. if (pCredRead != NULL && pCredFree != NULL && pCredEnumerate != NULL) bLoaded = TRUE; else { //Failed to load the credentials API functions. FreeCredsLibrary(); } } return bLoaded; } void CWinCredentials::FreeCredsLibrary() { //Free advapi32 library, if we previously loaded it. if (hAdvApi32 != NULL) { FreeLibrary(hAdvApi32); hAdvApi32 = NULL; } bLoaded = FALSE; } BOOL CWinCredentials::CredRead( LPCTSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIAL *Credential ) { if (bLoaded) return pCredRead(TargetName, Type, Flags, Credential); else return FALSE; } BOOL CWinCredentials::CredEnumerate( LPCTSTR Filter, DWORD Flags, DWORD *Count, PCREDENTIAL **Credentials ) { if (bLoaded) return pCredEnumerate(Filter, Flags, Count, Credentials); else return FALSE; } VOID CWinCredentials::CredFree(PVOID Buffer) { if (bLoaded) pCredFree(Buffer); } |
int wmain( int argc, wchar_t *argv[]) { CWinCredentials WinCredentials; //Load Credentials API functions. if (WinCredentials.LoadCredsLibrary()) { PCREDENTIAL *pCredArray = NULL; DWORD dwCount = 0; //Load all credentials into array. if (WinCredentials.CredEnumerate(NULL, 0, &dwCount, &pCredArray)) { for (DWORD dwIndex = 0; dwIndex < dwCount; dwIndex++) { PCREDENTIAL pCredential = pCredArray[dwIndex]; //Write the Credential information into the standard output. printf("*********************************************/r/n"); printf( "Flags: %d/r/n"/ "Type: %d/r/n"/ "Name: %ls/r/n"/ "Comment: %ls/r/n"/ "Persist: %d/r/n"/ "User: %ls/r/n", pCredential->Flags, pCredential->Type, pCredential->TargetName, pCredential->Comment, pCredential->Persist, pCredential->UserName); printf( "Data: /r/n"); char szHexBuffer[256] = ""; char szAsciiBuffer[256] = ""; char szHex[16]; char szAscii[2]; DWORD dwByte; //Write the credential's data as Hex Dump. for (dwByte = 0; dwByte < pCredential->CredentialBlobSize; dwByte++) { BYTE byte1 = pCredential->CredentialBlob[dwByte]; sprintf(szHex, "%2.2X ", byte1); szAscii[1] = '/0'; if (byte1 >= 32 && byte1 < 128) szAscii[0] = (UCHAR)byte1; else szAscii[0] = ' '; strcat(szHexBuffer, szHex); strcat(szAsciiBuffer, szAscii); if (dwByte == pCredential->CredentialBlobSize - 1 || dwByte % 16 == 15) { printf("%-50s %s/r/n", szHexBuffer, szAsciiBuffer); szHexBuffer[0] = '/0'; szAsciiBuffer[0] = '/0'; } } printf("*********************************************/r/n"); printf("/r/n/r/n"); } //Free the credentials array. WinCredentials.CredFree(pCredArray); } } else { printf("Failed to load the Credentials API functions !/r/n"); } return 0; } |
Download CredView Sample Project |
相关文章推荐
- 关于windows下编译caffe中blob C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe?
- Use PHP mail function with IIS SMTP Server in Windows for Local Testing Purpose
- The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support.
- OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows,
- anaconda2下面安装opencv2.4.13.4完成----解决默认安装的问题----Thefunction is not implemented. Rebuild the library with Windows, GTK+ 2.x orCarbon support. If you are on Ubuntu or Debian, install libgtk2.0‑dev and pkg
- Windows Batch with Linux useful binaries
- SDK Docs 1.1 Getting started with the MeeGo SDK for Windows - MeeGo wiki
- Hosting WCF Service with netTcpBinding in Windows Service
- DirectX11 With Windows SDK--14 深度测试
- Pro WPF in C# 2008: Windows Presentation Foundation with .NET 3.5, Second Edition
- DirectX11 With Windows SDK--19 模型加载:obj格式的读取及使用二进制文件提升读取效率
- Function echartR with package recharts
- windows下PHP中Fatal error Call to undefined function curl_init()的解决方法
- Only windows+hadoop(不需要任何其他软件)+MapReduce Sample
- Visualize function calls with Graphviz
- TV 600 Dual SIM Card Phone With Bluetooth & TV Function
- DirectX11 With Windows SDK--21 鼠标拾取
- [Docker] Install Docker on Windows (hp) and start with Kitematic
- Uninstall VLC media player with WindowsUninstaller.Org Removal Tips
- Windows 7 With Sp1 简体中文旗舰版 (MSDN官方原版)