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 関数を介してデバイスを開き、ファイルの読み取りまたは書き込みなどの 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 を含む) |