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 函数打开设备时,框架将调用 OnCreateFile 方法来执行 I/O作,例如从文件读取或写入文件。

驱动程序在驱动程序调用 IWDFDevice::CreateIoQueue 方法来创建 I/O 队列或配置默认 I/O 队列时注册 IQueueCallbackCreate 接口。

典型的 OnCreateFile 方法可能会对文件对象调用 IWDFObject::AssignContext 方法以将上下文与文件对象相关联,然后调用 IWDFIoRequest::Complete 以完成请求。

在模拟发送 I/O 请求的客户端时,可能需要 UMDF 驱动程序打开注册表项或文件。 从 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);
}

要求

要求 价值
目标平台 窗户
标头 wudfddi.h (包括 Wudfddi.h)

另请参阅