IQueueCallbackCreate::OnCreateFile 方法 (wudfddi.h)
警告
UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 未向 UMDF 1 添加新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。
当应用程序通过 Microsoft Win32 CreateFile 函数打开设备时,将调用 OnCreateFile 方法来处理打开的文件请求。
语法
void OnCreateFile(
[in] IWDFIoQueue *pWdfQueue,
[in] IWDFIoRequest *pWDFRequest,
[in] IWDFFile *pWdfFileObject
);
参数
[in] pWdfQueue
指向请求到达的 I/O 队列对象窗体的 IWDFIoQueue 接口的指针。
[in] pWDFRequest
指向设备的 I/O 请求对象的 IWDFIoRequest 接口的指针。
[in] pWdfFileObject
指向与设备关联的文件对象的 IWDFFile 接口的指针。 提供此信息是为了方便起见,因为驱动程序可以调用 IWDFIoRequest::GetCreateParameters 方法来获取文件对象。
返回值
无
备注
如果驱动程序实现 IQueueCallbackCreate 接口,则当应用程序通过 Win32 CreateFile 函数打开设备以执行 I/O 操作(例如读取或写入文件)时,框架将调用 OnCreateFile 方法。
驱动程序在调用 IWDFDevice::CreateIoQueue 方法以创建 I/O 队列或配置默认 I/O 队列时注册 IQueueCallbackCreate 接口。
典型的 OnCreateFile 方法可能会对文件对象调用 IWDFObject::AssignContext 方法以将上下文与文件对象相关联,然后调用 IWDFIoRequest::Complete 来完成请求。
UMDF 驱动程序可能需要在模拟发送 I/O 请求的客户端时打开注册表项或文件。 从 OnCreateFile 方法的实现中,驱动程序调用 IWDFIoRequest::Impersonate 方法来设置安全模拟级别,并设置驱动程序处理模拟的 IImpersonateCallback::OnImpersonate 方法。 若要使用用户的凭据访问必要的资源,框架会调用驱动程序的 OnImpersonate 方法。 对于需要模拟的操作以外的任何操作,框架会调用在默认驱动程序帐户下运行的驱动程序方法。 有关 UMDF 和 UMDF 驱动程序如何处理模拟的详细信息,请参阅 处理模拟。
示例
此示例基于 WpdWudfSampleDriver 示例,来自 Queue.cpp 文件。
STDMETHODIMP_ (void) CQueue::OnCreateFile(
/*[in]*/ IWDFIoQueue* pQueue,
/*[in]*/ IWDFIoRequest* pRequest,
/*[in]*/ IWDFFile* pFileObject
)
{
HRESULT hr = S_OK;
ClientContext* pClientContext = new ClientContext ();
// . . . Code omitted.
if(pClientContext != NULL) {
hr = pFileObject->AssignContext (this, (void*)pClientContext);
// Release the client context if we cannot set it
if(FAILED(hr)) {
pClientContext->Release();
pClientContext = NULL;
}
}
else {
hr = E_OUTOFMEMORY;
}
pRequest->Complete(hr);
}
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | wudfddi.h (包括 Wudfddi.h) |