次の方法で共有


WdfMemoryCopyToBuffer 関数 (wdfmemory.h)

[KMDF と UMDF に適用]

WdfMemoryCopyToBuffer メソッドは、指定したメモリ オブジェクトのバッファーの内容を、指定した宛先バッファーにコピーします。

構文

NTSTATUS WdfMemoryCopyToBuffer(
  [in]  WDFMEMORY SourceMemory,
  [in]  size_t    SourceOffset,
  [out] PVOID     Buffer,
  [in]  size_t    NumBytesToCopyTo
);

パラメーター

[in] SourceMemory

ソース バッファーを表すフレームワーク メモリ オブジェクトへのハンドル。

[in] SourceOffset

ソース バッファーの先頭からのオフセット (バイト単位)。 コピー操作は、ソース バッファー内の指定されたオフセットから開始されます。

[out] Buffer

宛先バッファーへのポインター。

[in] NumBytesToCopyTo

ソース バッファーからコピー先バッファーにコピーするバイト数。 この値は、ソース バッファーのサイズより大きくすることはできません。

戻り値

操作が成功した場合、WdfMemoryCopyToBuffer はSTATUS_SUCCESSを返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。

リターン コード 説明
STATUS_INVALID_PARAMETER
無効なパラメーターが検出されました。
STATUS_BUFFER_TOO_SMALL
SourceOffset パラメーターが指定したバイト オフセットが大きすぎたか、NumBytesToCopyTo パラメーターがソース バッファーのサイズを超えています。
 

このメソッドは、他の NTSTATUS 値を返す場合もあります。

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

注釈

フレームワークでは、 SourceMemory パラメーターで指定されているソース バッファーよりも多くのバイトをコピーすることはできません。

フレームワーク メモリ オブジェクトの詳細については、「メモリ バッファーの使用」を参照してください。

ページング可能なメモリ プールからソースバッファーまたは宛先バッファーが割り当てられた場合は、IRQL <= APC_LEVELで WdfMemoryCopyToBuffer メソッドを呼び出す必要があります。 それ以外の場合は、任意の IRQL で メソッドを呼び出すことができます。

次のコード例では、新しいバッファーを割り当て、メモリ オブジェクトのバッファーの内容を新しいバッファーにコピーします。

PVOID  pOutputBuffer = NULL;
NTSTATUS  status = STATUS_SUCCESS;

pOutputBuffer = ExAllocatePoolWithTag(
                                      NonPagedPool,
                                      MY_BUFFER_LENGTH,
                                      MY_POOL_TAG
                                      );
if (pOutputBuffer != NULL){
    status = WdfMemoryCopyToBuffer(
                                   outputMemoryHandle,
                                   0,
                                   pOutputBuffer,
                                   MY_BUFFER_LENGTH
                                   );
}
else{
    status = STATUS_INSUFFICIENT_RESOURCES;
}

要件

要件
対象プラットフォーム ユニバーサル
最小 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)

こちらもご覧ください

WdfMemoryCopyFromBuffer