vividone
驱动牛犊
驱动牛犊
  • 注册日期2007-11-24
  • 最后登录2017-04-25
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望220点
  • 贡献值1点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1443回复:2

<Programming the Windows Driver Model>一书中一个范例代码的疑问

楼主#
更多 发布于:2008-07-25 19:21
extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
  IN PUNICODE_STRING RegistryPath)
  {
  DriverObject->DriverUnload = DriverUnload;
  DriverObject->DriverExtension->AddDevice = AddDevice;
  DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
  DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
  DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] =
    DispatchWmi;

  servkey.Buffer = (PWSTR) ExAllocatePool(PagedPool,
    RegistryPath->Length + sizeof(WCHAR));
  if (!servkey.Buffer)
    return STATUS_INSUFFICIENT_RESOURCES;
  servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR);
  RtlCopyUnicodeString(&servkey, RegistryPath);
  servkey.Buffer[RegistryPath->Length/sizeof(WCHAR)] = 0;
  return STATUS_SUCCESS;
  }
其中ExAllocatePool函数第二个参数为什么是RegistryPath->Length + sizeof(WCHAR)而不是RegistryPath->Length?
作者考虑了对齐后可能pool不够用?还是其他因素?  
本人初学驱动,各位帮帮忙,谢谢!
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2008-07-25 19:35
字符串结束符 0x0000
vividone
驱动牛犊
驱动牛犊
  • 注册日期2007-11-24
  • 最后登录2017-04-25
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望220点
  • 贡献值1点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2008-07-25 20:58
Re:&lt;Programming the Windows Driver Model&gt;一书中一
谢谢楼上的牛人!
windows编程的数据类型可真是蛮搞的~ 我都把Length的类型当成WCHAR了~
游客

返回顶部