登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 24|回复: 0

驱动开发与系统原理UNICODE_STRING的使用

[复制链接]

56

主题

-7

回帖

66

积分

网站编辑

积分
66
发表于 4 天前 | 显示全部楼层 |阅读模式

UNICODE_STRING的五种初始化方式和一些相关操作

include<ntifs.h>

VOID DriverUnload(PDRIVER_OBJECT pDriver) { UNREFERENCED_PARAMETER(pDriver);//对没引用的参数进行处理

  DbgPrint("Unload success!\n"); 

}


NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath) {//驱动对象指针,注册表路径 DriverEntry不能改
  //指明该参数未被使用,避免被编译器警告
  UNREFERENCED_PARAMETER(pRegPath);
  //注册卸载函数,作用是指定用哪个函数来完成卸载
  pDriverObject->DriverUnload = DriverUnload;

  //第一种方法:宏
  DECLARE_CONST_UNICODE_STRING(usStr1,L"hello world1");
  DbgPrint("%wZ", usStr1);

  //第二种方法:API
  UNICODE_STRING usStr2 = { 0 };
  RtlInitUnicodeString(&usStr2, L"hello world2");
  DbgPrint("%wZ", usStr2);

  //第三种方法
  UNICODE_STRING usStr3 = { 0 };
  WCHAR wCstr[512] = L"hello world3";
  usStr3.Buffer = wCstr;
  usStr3.Length = wcslen(wCstr)*sizeof(WCHAR);
  usStr3.MaximumLength = usStr3.Length;
  DbgPrint("%wZ", usStr3);

  //第四种方法
  UNICODE_STRING usStr4 = RTL_CONSTANT_STRING(L"hello world4");
  DbgPrint("%wZ", usStr4);

  //第五种方法
  UNICODE_STRING usStr5 = { 0 };
  ULONG uLength = (wcslen(L"Hello world5"))*sizeof(WCHAR);
  usStr5.Buffer = ExAllocatePoolWithTag(NonPagedPool, uLength, 'JXNU');
  if (usStr5.Buffer==NULL)
  {
    return STATUS_SUCCESS;//为了防止蓝屏,我设置了返回成功,这个可以自己看返回的列表选择
  }
  RtlZeroMemory(usStr5.Buffer, uLength);
  RtlCopyMemory(usStr5.Buffer, L"Hello world5", uLength);
  usStr5.Length = uLength;
  usStr5.MaximumLength = uLength;
  DbgPrint("%wZ", usStr5);
  ExFreePoolWithTag(usStr5.Buffer, 'JXNU');

  //拷贝
  UNICODE_STRING ustr1 = { 0 };
  WCHAR wcBuffer[256];
  RtlInitEmptyUnicodeString(&ustr1, &wcBuffer, 256 * sizeof(WCHAR));
  RtlCopyUnicodeString(&ustr1, &usStr2);
  DbgPrint("%wZ", ustr1);

  //拼接
  RtlAppendUnicodeStringToString(&ustr1, &usStr2);
  DbgPrint("%wZ", ustr1);

  //比较
  if (0 == RtlCompareUnicodeString(&usStr3, &usStr4, TRUE))//true 忽略大小写 false 不忽略大小写
  {
    DbgPrint("==");
  }
  else
  {
    DbgPrint("!=");
  }

  return STATUS_SUCCESS;//状态成功0,一定要有返回值
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-1-24 19:21 , Processed in 0.058244 second(s), 26 queries .

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表