Enumerating Windows credentials with CredEnumerate function (Windows XP/2003 Only)

java.lang.Throwable: Substituted for the exception com.bea.xml.SchemaTypeLoaderException which lack weblogic报错信息: <Error> <Console> <AdminServer> <[ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'> <webuser> <> <> <1624366734323> <BEA-240003> <Administration Console 阅读详情
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:

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);
}


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:

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

RK3588 MPP视频编码实战:从环境搭建到高效封装 本文详细介绍了在RK3588平台上利用MPP(Media Process Platform)进行硬件视频编码的完整实战流程。从MPP库的环境搭建、编译安装,到核心编码参数(如码率控制、GOP、图像对齐)的深入解析,并提供了一个可复用的C++编码器类封装方案,帮助开发者快速实现高效的H.264/H.265视频编码,显著降低CPU占用。 阅读详情

相关推荐

SA8295P QNX主机上电启动流程分析

嵌入式系统的启动过程对于确保系统正常运行至关重要。本文将详细分析SA8295P芯片在QNX主机上的上电启动流程,并提供相应的源代码示例。嵌入式系统的启动过程对于确保系统正常运行至关重要。本文将详细分析SA8295P芯片在QNX主机上的上电启动流程,并提供相应的源代码示例。以下是一个SA8295P QNX主机上电启动流程分析。

CodeMaven的博客 1185

MSN 密码获取

 **** Windows Live Messenger v8.0 Password Finder for Windows XP & 2003** (Compiled-VC++ 6.0 SP6, tested on WinXP SP2, Windows Live Messenger8.0.0812.00)** - Gregory R. Panakkal** http://www.crapware.

1157

jna.rar_jna_jna.jar_jna文件

这是一个jna.jar的文件,读者可能下载这个文件,满足自己调用java的需求

weblogic Error [Management:141191]The prepare phase of the configuration update failed with an excep

在weblogic 上部署应用的时候遇到错误 Error [Management:141191]The prepare phase of the configuration update failed with an exception: Read more: http://www.techartifact.com/blogs/2014/03/resolved-management

zzzxxbird的专栏 1万+

WEBLOGIC建立数据源连接测试成功激活更改出错

即便有的节点对应的应用已经有了数据源,也需要关闭所有的除了adminserver之外的节点服务器。解决:把除了adminserver之外的节点服务器全部关闭,然后再建立数据源,激活更改。

xiangshiyufengzhong的博客 2205

消息图标 - 错误 [Management:141191]The prepare phase of the configuration update failed with an exception.

MARCH 13, 2014 BY VINAY Resolved- [Management:141191]The prepare phase of the configuration update failed with an exception While working in python script, i got this error.I found cause of the erro...

qq_39596006的博客 4305

fatal: unable to commit credential store: Device or resource busy

jenkins 带git证书,执行git命令

oneslide 1641

VC编程获取MSN口令的代码

MSN Messenger uses Windows Credential UI [credui.dll] on WinXP/2003. Password-Storage mechanism differs in these OSes so, the code posted by tombkeeper [http://xfocus.net/articles/200408/726.html] d

海阔天空的专栏 774

转一个获取MSN口令的代码

MSN Messenger uses Windows Credential UI [credui.dll]on WinXP/2003. Password-Storage mechanism differs inthese OSes so, the code posted by tombkeeper[http://xfocus.net/articles/200408/726.html] doesn

yztgx的专栏 2000

[C++] 获取IE代理服务器的账号密码

很多程序需要使用‘浏览器设置’的代理服务器,IE设置的代理服务器有可能是需要账号密码的。怎样编程获取浏览器设置的代理服务器的账号密码呢?InternetQueryOption(NULL, INTERNET_OPTION_PASSWORD, buf, &len)这个方法被证明不能达到我们的目标。INTERNET_OPTION_PASSWORD只能用于获取特定连接的密码,也就是说只有当你对...

weixin_30820151的博客 595

从Git删除凭证

I'm working with several repositories, but lately I was just working in our internal one and all wa

CHCH998的博客 2079

微软 Credential Providers 详解二《关键函数》

http://www.mycode.net.cn/language/cpp/1961.html 上一篇中我们介绍了凭据的加载和代码中函数的调用顺序,接下来我们就要了解一下一些关键函数在代码中起到什么作用了。了解清楚这些以后我们才能定制出我们自己需要功能。 CSampleProvider::SetUsageScenario 这个函数非常重要,在凭据被加载起来以后,由微软调用,我们实现这个...

xuq09的专栏 2444

enumerate使用方法

enumerate使用方法 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中 举个例子 seq = ['one', 'two', 'three'] for i, element in enumerate(seq): print(i, element) 结果是 0 one 1 two 2 three ...

Fitz的博客 648

weblogic配置完数据源之后,激活更改出错?

原因:JDK版本不一致造成的,在MyEclipse上将对应项目的JDK版本换为 weblogic目录下的jdk版本

仰望星空的专栏 1万+

Trickbot***又开始造作了,VNC、RDP等远程工具凭证都是它的目标

在2018年11月份,趋势科技发现了一个带有密码抓取模块的Trickbot***变种,它可以从大量的应用程序中窃取凭证。在今年1月份,趋势科技继续观察到了Trickbot的多个变种(如TrojanSpy.Win32.TRICKBOT.AZ和Trojan.Win32.MERETAM.AD),它们或多或少都具备一些新的能力。显然,Trickbot的开发者并没有停止对它的更新。最近...

weixin_34228662的博客 218
上一篇: Preventing application crash by using exception handling mechanism
下一篇: Displaying the 'Properties' of a file or folder.
iiprogram
博客等级 码龄25年 1066粉丝 1515原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值