Share via


Inizializzazione driver windows 2000

In Windows 2000 e versioni successive, le informazioni sui driver vengono recuperate solo quando richieste da un'applicazione. In altre parole, in risposta alla richiesta di un'applicazione Microsoft DirectDraw di creare un'istanza di un oggetto DirectDraw, il motore grafico chiama le funzioni driver per inizializzare un driver DirectDraw.

A partire da Windows 2000, questa sequenza viene eseguita al momento dell'avvio e dopo ogni modifica della modalità. Questo ha un effetto collaterale. In Windows 98/Me i driver in genere hanno due modalità di modalità operation-GDI e DirectDraw. Se DirectDraw è in esecuzione, non consente alle bitmap della cache GDI, invece di concedere tutta la memoria a DirectDraw (e viceversa quando in modalità GDI). Questo comportamento ha causato la sofferenza delle applicazioni finestrate ,ad esempio pagine Web che usano DirectX. Pertanto, in Windows 2000 e versioni successive, GDI e DirectDraw sono necessari per collaborare sulla modalità di utilizzo della memoria. Il driver di esempio Permedia3 fornito con Windows Driver Development Kit (DDK) presenta esempi di come eseguire questa operazione. (DDK ha preceduto Windows Driver Kit [WDK].)

La sequenza di inizializzazione del driver viene ottenuta chiamando le funzioni seguenti:

  • DrvGetDirectDrawInfo per recuperare informazioni sulle funzionalità dell'hardware. GDI chiama questa funzione due volte:

    • La prima chiamata determina le dimensioni dell'heap di memoria visualizzato e il numero di QUATTROCC supportati dal driver. GDI passa NULL per i parametri pvmList e pdwFourCC . Il driver deve inizializzare e restituire solo parametri pdwNumHeaps e pdwNumFourCC .
    • La seconda chiamata viene eseguita dopo che GDI alloca memoria di visualizzazione e memoria FOURCC in base ai valori restituiti dalla prima chiamata in pdwNumHeaps e pdwNumFourCC parametri. Nella seconda chiamata, il driver deve inizializzare e restituire i parametri pdwNumHeaps, pvmList, pdwNumFourCC e pdwFourCC.

    GDI alloca e inizializza la struttura di DD_HALINFO a cui pHalInfo punta. La funzione DrvGetDirectDrawInfo deve compilare i membri pertinenti della struttura DD_HALINFO con informazioni specifiche del driver:

    • Il driver deve inizializzare i membri appropriati delle strutture VIDEOMEMORYINFO per descrivere il formato generale della memoria dello schermo. Vedere Visualizzare la memoria.
    • Il driver deve inizializzare i membri appropriati della struttura DDCORECAPS per descrivere le funzionalità principali del driver in DirectDraw.
    • Se il driver supporta una delle funzionalità DirectX sottoposte a query inviando un GUID al callback DdGetDriverInfo del driver, il driver deve inizializzare il membro GetDriverInfo per puntare al callback DdGetDriverInfo del driver e impostare il DDHALINFO_GETDRIVERINFOSET bit in dwFlags.
    • Il driver deve impostare dwSize sulle dimensioni, in byte, della struttura DD_HALINFO .
  • DrvEnableDirectDraw viene usato dal runtime per abilitare l'hardware DirectDraw e determinare alcuni dei callback del driver. GDI alloca e inizializza le strutture dei parametri DD_CALLBACKS, DD_SURFACECALLBACKS e DD_PALETTECALLBACKS. Il driver deve eseguire le operazioni seguenti per ognuno di questi callback implementati:

    • Impostare il membro corrispondente della struttura appropriata per puntare al callback.
    • Impostare il bit DDHAL_XXX_XXX corrispondente nel membro dwFlags della struttura appropriata.

    Il driver può implementare la funzione DrvEnableDirectDraw per indicare che supporta le funzioni di callback elencate nel supporto di Callback DirectDraw usando DrvEnableDirectDraw.

    L'implementazione di DrvEnableDirectDraw di un driver può anche dedicare risorse hardware come la memoria visualizzata per l'uso solo da DirectDraw.

  • DdGetDriverInfo per recuperare le altre funzioni e funzionalità di callback supportate dal driver.

    Se non è NULL, il callback di GetDriverInfo viene restituito nella struttura di DD_HALINFO dal drvGetDirectDrawInfo del driver. GDI alloca e inizializza la struttura di DD_GETDRIVERINFODATA e chiama DdGetDriverInfo per ognuno dei GUID descritti nella sezione di riferimento DD_GETDRIVERINFODATA. Tutti i GUID sono definiti in ddrawint.h.

    Il driver può implementare la funzione DdGetDriverInfo per indicare che supporta le funzioni di callback specificate nel supporto di Callback DirectDraw e Direct3D Tramite DdGetDriverInfo.

Bloccando la memoria della superficie (se l'intera superficie o parte di una superficie) garantisce che un'applicazione e l'hardware non possano ottenere l'accesso alla memoria della superficie contemporaneamente. Ciò impedisce l'esecuzione di errori durante la scrittura di un'applicazione nella memoria di superficie. Inoltre, un'applicazione non può scorrere una pagina fino a quando non viene sbloccata la memoria di superficie.