Windows内核函数 - ANSI_STRIN字符串与UNICODE_STRING字符串相互转换

        DDK提供了ANSI_STRING字符串与UNICODE_STRING字符串像话转换的相关函数。

(1). 将UNICODE_STRING字符串转换成ANSI_STRING字符串。

DDK对于这种转换提供的函数是 RtlUnicodeStringToAnsiString

NTSTATUS RtlUnicodeStringToAnsiString(
    IN OUT PANSI_STRING DestinationString,
    IN PCUNICODE_STRING SourceString,
    IN BOOLEAN AllocateDestinationString
    );
// DestinationString: 需要被转换的目的字符串
// SourceString: 需要转换的源字符串
// AllocateDestinationString: 是否需要对被转换的字符串分配内存。
// 返回值:指明是否转换成功

(2). 将ANSI_STRING字符串转换成UNICODE_STRING字符串

DDK对于这种转换提供的函数是 RtlAnsiStringToUnicodeString, 其声明是:

NTSTATUS RtlAnsiStringToUnicodeString(
    IN OUT PUNICODE_STRING DestinationString,
    IN PCANSI_STRING SourceString,
    IN BOOLEAN AllocateDestinationString
    );
// DestinationString: 需要被转换的目的字符串
// SourceString: 需要转换的源字符串 
// AllocateDestinationString: 是否需要对被转换的字符串分配内存。
// 返回值:指明是否转换成功

以下的代码演示了如何实现 ANSI_STRING 字符串与 UNICODE_STRING字符串的相互转换。

// (1). 将UNICODE_STRING字符串转换成ANSI_STRING字符串
	// 初始化 UnicodeStr1
	UNICODE_STRING  UnicodeStr1;
	RtlInitUnicodeString(&UnicodeStr1, L"Hello World");


	ANSI_STRING  AnsiStr1;
	NTSTATUS nStatus = RtlUnicodeStringToAnsiString(&AnsiStr1, &UnicodeStr1, TRUE);

	if (NT_SUCCESS(nStatus))
	{
		KdPrint(("Conver  unicode to ansi successfully!\n"));
		KdPrint(("Result: %Z\n", &AnsiStr1));
	}
	else
	{
		KdPrint(("Conver unicode to ansi  unsuccessfully!\n"));
	}

	// 销毁 AnsiStr1
	RtlFreeAnsiString(&AnsiStr1);

	// (1). 将ANSI_STRING字符串转换成UNICODE_STRING字符串
	// 初始化AnsiStr2;
	ANSI_STRING  AnsiStr2;
	RtlInitString(&AnsiStr2, "Hello World");

	UNICODE_STRING UnicodeStr2;
	nStatus = RtlAnsiStringToUnicodeString(&UnicodeStr2, &AnsiStr2, TRUE);
	
	if (NT_SUCCESS(nStatus))
	{
		KdPrint(("Conver ansi to unicode successfully!\n"));
		KdPrint(("Result: %wZ\n", &UnicodeStr2));
	}
	else
	{
		KdPrint(("Conver ansi to unicode unsuccessfully!\n"));
	}
	// 销毁 UnicodeStr2
	RtlFreeUnicodeString(&UnicodeStr2);


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WendyWJGu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值