WdfMemoryAssignBuffer 関数 (wdfmemory.h)
[KMDF と UMDF に適用]
WdfMemoryAssignBuffer メソッドは、WdfMemoryCreatePreallocated を呼び出してドライバーが作成したメモリ オブジェクトに、指定したバッファーを割り当てます。
構文
NTSTATUS WdfMemoryAssignBuffer(
[in] WDFMEMORY Memory,
[in] PVOID Buffer,
[in] size_t BufferSize
);
パラメーター
[in] Memory
WdfMemoryCreatePreallocated を呼び出すことによって取得されたフレームワーク メモリ オブジェクトへのハンドル。
[in] Buffer
ドライバーが提供するバッファーへのポインター。
[in] BufferSize
Buffer が指すバッファーの 0 以外のサイズ (バイト単位)。
戻り値
操作が成功した場合、WdfMemoryAssignBuffer はSTATUS_SUCCESSを返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。
リターン コード | 説明 |
---|---|
|
無効なパラメーターが検出されました。 |
このメソッドは、他の NTSTATUS 値を返す場合もあります。
ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。
注釈
メソッドは、 WdfMemoryCreatePreallocated によって作成されたメモリ オブジェクトにバッファーを割り当てることができますが、 WdfMemoryCreate によって作成されたメモリ オブジェクトには割り当てられません。
Buffer パラメーターが指す バッファー は、ページング可能またはページング不可能なメモリ プールから割り当てることができます。 ドライバーがページング可能なプールからバッファーを割り当てる場合、またはバッファーがユーザー モード のアプリケーションから取得されたためにページング可能なプールからのバッファーである場合、ドライバーは IRQL < DISPATCH_LEVELでのみバッファーにアクセスする必要があります。 (ドライバーの EvtCleanupCallback および EvtDestroyCallback コールバック関数が指定されている場合は、IRQL <= DISPATCH_LEVELで呼び出すことができることに注意してください)。
フレームワーク メモリ オブジェクトの詳細については、「 メモリ バッファーの使用」を参照してください。
例
次のコード例では、バッファーを割り当ててから、フレームワーク メモリ オブジェクトにバッファーを割り当てます。
PVOID pNewBuffer = NULL;
pNewBuffer = ExAllocatePoolWithTag(
NonPagedPool,
NEW_BUFFER_SIZE,
MY_DRIVER_TAG
);
if (pNewBuffer == NULL){
goto Error;
}
status = WdfMemoryAssignBuffer(
memHandle,
pNewBuffer,
NEW_BUFFER_SIZE
);
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
最小 UMDF バージョン | 2.0 |
Header | wdfmemory.h (Wdf.h を含む) |
Library | Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF) |
IRQL | 任意のレベル |
DDI コンプライアンス規則 | BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf)、 BufAfterReqCompletedWriteA(kmdf)、 DriverCreate(kmdf)、 MemAfterReqCompletedIntIoctlA(kmdf)、 MemAfterReqCompletedIoctlA(kmdf)、 MemAfterReqCompletedReadA(kmdf)、 MemAfterReqCompletedWriteA(kmdf) |