BaoFu
驱动小牛
驱动小牛
  • 注册日期2002-10-07
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:901回复:1

返回值的困惑

楼主#
更多 发布于:2003-04-26 15:38
我基础不好,且刚刚开始看waltoney那本书,发现一个不懂的问题,我将这段代码和我的疑问列在下面,诚恳求教:
extern \"C\"
NTSTATUS   //这是驱动入口函数的返回值的类型。
DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
  DriverObject->DriverUnload = DriverUnload; <--1
  DriverObject->DriverExtension->AddDevice = AddDevice;
  DriverObject->DriverStartIo = StartIo;
  DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp; <--2
  DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
  DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = DispatchWmi;
  ... <--3
  servkey.Buffer = (PWSTR) ExAllocatePool(PagedPool, RegistryPath->Length + sizeof(WCHAR)); <--4
  if (!servkey.Buffer)
    return STATUS_INSUFFICIENT_RESOURCES;   //这个if语句当然要引出一个返回值,
  servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR);
  RtlCopyUnicodeString(&servkey, RegistryPath);
  return STATUS_SUCCESS;// 这里又有一个返回值 <--5
}
问题:
   明明只能接受一个返回值,却可能出现两次返回。如果是那样的话,最后得到的究竟是什么样的一个返回值呢?是STATUS_INSUFFICIENT_RESOURCES?还是STATUS_SUCCESS?或者有别的更好的解释?
  
  
  
zhanghuhu
驱动小牛
驱动小牛
  • 注册日期2002-11-30
  • 最后登录2005-02-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-11 21:58
如果分配缓冲池失败,则if语句的条件为真,函数返回STATUS_INSUFFICIENT_RESOURCES,后面的语句不会执行;否则,return STATUS_INSUFFICIENT_RESOURCES;语句不会执行,自然返回的是STATUS_SUCCESS。
多多交流
游客

返回顶部