다음을 통해 공유


IQueueCallbackCreate::OnCreateFile 메서드(wudfddi.h)

경고

UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한됩니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. 자세한 내용은 UMDF를 사용하여 시작 참조하세요.

OnCreateFile 메서드는 애플리케이션이 Microsoft Win32 CreateFile 함수를 통해 디바이스를 열 때 열린 파일 요청을 처리하기 위해 호출됩니다.

구문

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 를 호출하여 요청을 완료할 수 있습니다.

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 포함)

추가 정보