阅读:901回复:1
返回值的困惑
我基础不好,且刚刚开始看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?或者有别的更好的解释? |
|
沙发#
发布于:2003-05-11 21:58
如果分配缓冲池失败,则if语句的条件为真,函数返回STATUS_INSUFFICIENT_RESOURCES,后面的语句不会执行;否则,return STATUS_INSUFFICIENT_RESOURCES;语句不会执行,自然返回的是STATUS_SUCCESS。
|
|
|