Bagikan melalui


DXGKDDI_GETDISPLAYSTATEINTRUSIVE fungsi panggilan balik (dispmprt.h)

Sistem operasi (OS) memanggil rutinitas DxgkDdiGetDisplayStateNonIntrusive driver miniport tampilan untuk mengumpulkan informasi status tampilan dari driver.

Sintaks

DXGKDDI_GETDISPLAYSTATEINTRUSIVE DxgkddiGetdisplaystateintrusive;

NTSTATUS DxgkddiGetdisplaystateintrusive(
  [in]     HANDLE Context,
  [in/out] PDXGKARG_GETDISPLAYSTATEINTRUSIVE pArgs
)
{...}

Parameter

[in] Context

Penunjuk ke konteks privat yang dikembalikan oleh DxgkDdiQueryInterface.

[in/out] pArgs

Penunjuk ke struktur DXGKARG_GETDISPLAYSTATEINTRUSIVE .

Nilai kembali

DxgkDdiGetDisplayStateIntrusive mengembalikan STATUS_SUCCESS jika berhasil. Jika tidak, ia mengembalikan kode kesalahan seperti salah satu dari berikut ini.

Kode Kesalahan Makna
STATUS_DRIVER_INTERNAL_ERROR Terjadi kesalahan perangkat lunak generik di dalam driver.
STATUS_ACCESS_DENIED Perangkat keras saat ini sedang digunakan oleh utas lain dan DDI ini tidak bisa mendapatkan akses ke dalamnya.
STATUS_DEVICE_HARDWARE_ERROR Terjadi kesalahan HW generik.
STATUS_DEVICE_POWERED_OFF Perangkat dimatikan.

Keterangan

OS memanggil DxgkDdiGetDisplayStateIntrusive untuk mengumpulkan informasi status tampilan dari driver ketika pengguna sudah dalam keadaan buruk. Tidak seperti DxgkDdiGetDisplayStateNonIntrusive, rutinitas DxgkDdiGetDisplayStateIntrusive driver dapat melakukan operasi yang lebih mengganggu yang memiliki efek samping yang terlihat kepada pengguna . Operasi yang mengganggu didefinisikan sebagai berikut (operasi yang tidak mengganggu tidak memiliki salah satu properti ini):

  • Ini menyebabkan efek samping (gangguan) yang terlihat oleh pengguna (seperti menghentikan pemindaian sementara dan pemeriksaan konektivitas monitor yang merusak).

  • Ini lambat, dan memengaruhi performa sistem atau tampilan jika sering dipanggil (beberapa kali dalam detik).

  • Ini mengubah status subsistem tampilan (atau subsistem lainnya) secara langsung atau tidak langsung.

Driver tidak boleh mengubah status sistem dengan sengaja saat mengumpulkan data.

OS akan menyebut rutinitas ini jauh lebih jarang relatif terhadap panggilan ke DxgkDdiGetDisplayStateNonIntrusive. Dalam sebagian besar skenario kesalahan, OS pertama-tama akan memanggil DxgkDdiGetDisplayStateNonIntrusive dan kemudian memanggil DxgkDdiGetDisplayStateIntrusive untuk memastikan bahwa efek yang tidak disengaja dari panggilan intrusif tidak memengaruhi pengumpulan data yang tidak mengganggu.

DXGKRNL akan memanggil rutinitas ini dengan NumOfTargets diatur ke jumlah target tempat OS melaporkan bahwa ada monitor yang terhubung dengan VidPnTargetId yang sesuai yang diisi. Ketika driver percaya tidak ada monitor yang terhubung pada target tertentu maka harus menetapkan ReturnSubStatus agar target tersebut DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED.

Catatan

Jika driver mengalami kegagalan pada vidpntarget tertentu saat mengumpulkan informasi, driver harus menggunakan ReturnSubStatus untuk mengatur status kesalahan dan melanjutkan ke vidpntarget berikutnya dan tidak gagal dalam panggilan keseluruhan kecuali semua jalur mengalami kegagalan. Driver idealnya harus merekam kesalahan yang terjadi selama panggilan ini dalam beberapa log kesalahan internal sehingga ketika OS memanggil DxgkDdiCollectDiagnosticInfo untuk mengumpulkan informasi kotak hitam, kesalahan ini ditangkap sebagai bagian dari pengumpulan log internal untuk membantu IHV debug.

OS akan memiliki batas waktu yang cukup (sekitar 5 detik) untuk menyelesaikan DxgkDdiGetDisplayStateIntrusive , memberikan driver lebih banyak waktu untuk mengumpulkan semua status yang relevan. Setelah waktu habis, OS mungkin melakukan bugcheck pada mesin dan mengumpulkan cadangan jika driver macet dalam panggilan ini, sehingga miniport harus mencoba untuk selalu menyelesaikan panggilan ini dalam jangka waktu.

Tingkat sinkronisasi untuk DDI ini adalah sinkronisasi tingkat nol.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10, version 2004
Header dispmprt.h

Lihat juga

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface