Share via


PDX_TRANSFER Rückruffunktion (dxmini.h)

Die DxTransfer-Rückruffunktion informiert den Treiber über den Bus master Daten von einer Oberfläche in den puffer, der in der Speicherdeskriptorliste (Memory Descriptor List, MDL) angegeben ist.

Syntax

PDX_TRANSFER PdxTransfer;

DWORD PdxTransfer(
  PVOID unnamedParam1,
  PDDTRANSFERININFO unnamedParam2,
  PDDTRANSFEROUTINFO unnamedParam3
)
{...}

Parameter

unnamedParam1

Verweist auf die Geräteerweiterung des Miniporttreibers.

unnamedParam2

Verweist auf eine DDTRANSFERININFO-Struktur , die die Übertragungsinformationen für die Oberfläche enthält.

unnamedParam3

Verweist auf eine DDTRANSFEROUTINFO-Struktur , die die Polarität des zu erfassenden Felds enthält.

Rückgabewert

DxTransfer gibt bei Erfolg DX_OK zurück. Andernfalls wird einer der folgenden Fehlerwerte zurückgegeben:

Hinweise

Die MDL ist in der WDM-Dokumentation definiert.

Wie im folgenden Codebeispiel gezeigt, kann der Video-Miniporttreiber den Zeiger auf die MDL im lpDestMDL-Member der DDTRANSFERININFO-Struktur am TransferInInfo-Parameter verwenden, um Daten master auf die physischen Speicherseiten zu übertragen, die einen verteilten Puffer bilden:

DWORD 
DxTransfer(
    DEVICE_EXT *pDeviceExt, 
    PDDTRANSFERININFO pTransferInInfo, 
    PDDTRANSFEROUTINFO pTransferOutInfo
    )
{
    PMDL pMdl;
    UINT uiNbPages;
    PPFN_NUMBER pPages;
    PVOID MappedSystemVa;
    ULONG ByteCount;

    pMdl = pTransferInInfo->lpDestMDL;
    MappedSystemVa = MmGetMdlVirtualAddress(pMdl);
    ByteCount = MmGetMdlByteCount(pMdl);
    uiNbPages = ADDRESS_AND_SIZE_TO_SPAN_PAGES(MappedSystemVa,
                                               ByteCount);
    pPages = MmGetMdlPfnArray(pMdl)
    for (i=0; i<uiNbPages; i++) {
        //
        // Transfer to page[i]
        //
        pPages[i];
    }
}

Weitere Informationen finden Sie unter den Kernelmodusmakros ADDRESS_AND_SIZE_TO_SPAN_PAGES, MmGetMdlByteCount, MmGetMdlPfnArray und MmGetMdlVirtualAddress.

DxTransfer wird zur Hardwareunterbrechungszeit aufgerufen. Dies bedeutet, dass der Treiber nicht warten kann, bis ein vorheriger Bus master abgeschlossen ist, und er kann keine Funktionen aufrufen, die zur Unterbrechungszeit nicht sicher sind (d. h. die meisten davon).

Darüber hinaus sollte der Treiber den Aufruf nicht fehlschlagen, nur weil die Hardware derzeit ausgelastet ist. Stattdessen sollte der Treiber eine interne Warteschlange verwalten.

Anforderungen

   
Zielplattform Desktop
Kopfzeile dxmini.h (dxmini.h einschließen)

Weitere Informationen

ADDRESS_AND_SIZE_TO_SPAN_PAGES

DDTRANSFERININFO

DDTRANSFEROUTINFO

MmGetMdlByteCount

MmGetMdlPfnArray

MmGetMdlVirtualAddress