次の方法で共有


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を返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。

リターン コード 説明
STATUS_INVALID_PARAMETER
無効なパラメーターが検出されました。
 

このメソッドは、他の 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)

こちらもご覧ください

ExAllocatePoolWithTag

WdfMemoryCreatePreallocated