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)

另请参阅