ReactOS 0.4.15-dev-7842-g558ab78
dispatch.c File Reference
#include "videoprt.h"
#include <ndk/inbvfuncs.h>
#include <ndk/obfuncs.h>
#include <ndk/psfuncs.h>
#include <debug.h>
Include dependency graph for dispatch.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

static VOID VideoPortWin32kCallout (_In_ PVIDEO_WIN32K_CALLBACKS_PARAMS CallbackParams)
 
static BOOLEAN NTAPI IntVideoPortResetDisplayParametersEx (_In_ ULONG Columns, _In_ ULONG Rows, _In_ BOOLEAN CalledByInbv)
 
static BOOLEAN NTAPI IntVideoPortResetDisplayParameters (ULONG Columns, ULONG Rows)
 
static VOID NTAPI InbvMonitorThread (_In_ PVOID Context)
 
static NTSTATUS IntVideoPortInbvInitialize (VOID)
 
static NTSTATUS IntVideoPortInbvCleanup (IN PDEVICE_OBJECT DeviceObject)
 
NTSTATUS NTAPI IntVideoPortAddDevice (IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject)
 
NTSTATUS NTAPI IntVideoPortDispatchOpen (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortDispatchClose (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
PSTR IoctlName (ULONG Ioctl)
 
static NTSTATUS VideoPortUseDeviceInSession (_Inout_ PDEVICE_OBJECT DeviceObject, _Inout_ PVIDEO_DEVICE_SESSION_STATUS SessionState, _In_ ULONG BufferLength, _Out_ PULONG_PTR Information)
 
static NTSTATUS VideoPortInitWin32kCallbacks (_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PVIDEO_WIN32K_CALLBACKS Win32kCallbacks, _In_ ULONG BufferLength, _Out_ PULONG_PTR Information)
 
static NTSTATUS VideoPortForwardDeviceControl (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortDispatchDeviceControl (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortPnPStartDevice (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortForwardIrpAndWaitCompletionRoutine (PDEVICE_OBJECT Fdo, PIRP Irp, PVOID Context)
 
NTSTATUS NTAPI IntVideoPortQueryBusRelations (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortForwardIrpAndWait (PDEVICE_OBJECT DeviceObject, PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortDispatchFdoPnp (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortDispatchPnp (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortDispatchCleanup (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortDispatchPower (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS NTAPI IntVideoPortDispatchSystemControl (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
VOID NTAPI IntVideoPortUnload (PDRIVER_OBJECT DriverObject)
 

Variables

static PVIDEO_WIN32K_CALLOUT Win32kCallout = NULL
 
static HANDLE InbvThreadHandle = NULL
 
static BOOLEAN InbvMonitoring = FALSE
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 28 of file dispatch.c.

Function Documentation

◆ InbvMonitorThread()

static VOID NTAPI InbvMonitorThread ( _In_ PVOID  Context)
static

Definition at line 208 of file dispatch.c.

210{
211 VIDEO_WIN32K_CALLBACKS_PARAMS CallbackParams;
212 LARGE_INTEGER Delay;
213 USHORT i;
214
216
217 while (TRUE)
218 {
219 /*
220 * During one second, check the INBV status each 100 milliseconds,
221 * then revert to 1 second delay.
222 */
223 i = 10;
224 Delay.QuadPart = (LONGLONG)-100*1000*10; // 100 millisecond delay
225 while (!InbvMonitoring)
226 {
228
229 if ((i > 0) && (--i == 0))
230 Delay.QuadPart = (LONGLONG)-1*1000*1000*10; // 1 second delay
231 }
232
233 /*
234 * Loop while the display is owned by INBV. We cannot do anything else
235 * than polling since INBV does not offer a proper notification system.
236 *
237 * During one second, check the INBV status each 100 milliseconds,
238 * then revert to 1 second delay.
239 */
240 i = 10;
241 Delay.QuadPart = (LONGLONG)-100*1000*10; // 100 millisecond delay
243 {
245
246 if ((i > 0) && (--i == 0))
247 Delay.QuadPart = (LONGLONG)-1*1000*1000*10; // 1 second delay
248 }
249
250 /* Reset the monitoring */
252
253 /*
254 * Somebody released INBV display ownership, usually by invoking
255 * InbvNotifyDisplayOwnershipLost(). However the caller of this
256 * function certainly specified a different callback than ours.
257 * As we are going to be the only owner of the active display,
258 * we need to re-register our own display reset callback.
259 */
261
262 /* Tell Win32k to reset the display */
263 CallbackParams.CalloutType = VideoFindAdapterCallout;
264 // CallbackParams.PhysDisp = NULL;
265 CallbackParams.Param = (ULONG_PTR)TRUE; // TRUE: Re-enable display; FALSE: Disable display.
266 VideoPortWin32kCallout(&CallbackParams);
267 }
268
269 // FIXME: See IntVideoPortInbvCleanup().
270 // PsTerminateSystemThread(STATUS_SUCCESS);
271}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define ULONG_PTR
Definition: config.h:101
#define KeDelayExecutionThread(mode, foo, t)
Definition: env_spec_w32.h:484
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define KeGetCurrentThread
Definition: hal.h:55
VOID NTAPI InbvNotifyDisplayOwnershipLost(_In_ INBV_RESET_DISPLAY_PARAMETERS Callback)
Definition: inbv.c:404
BOOLEAN NTAPI InbvCheckDisplayOwnership(VOID)
Definition: inbv.c:316
#define LOW_REALTIME_PRIORITY
#define KernelMode
Definition: asm.h:34
@ VideoFindAdapterCallout
Definition: ntddvdeo.h:296
unsigned short USHORT
Definition: pedump.c:61
VIDEO_WIN32K_CALLBACKS_PARAMS_TYPE CalloutType
Definition: ntddvdeo.h:319
KPRIORITY NTAPI KeSetPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Priority)
Definition: thrdobj.c:1319
int64_t LONGLONG
Definition: typedefs.h:68
LONGLONG QuadPart
Definition: typedefs.h:114
static BOOLEAN InbvMonitoring
Definition: dispatch.c:35
static VOID VideoPortWin32kCallout(_In_ PVIDEO_WIN32K_CALLBACKS_PARAMS CallbackParams)
Definition: dispatch.c:40
static BOOLEAN NTAPI IntVideoPortResetDisplayParameters(ULONG Columns, ULONG Rows)
Definition: dispatch.c:168

Referenced by IntVideoPortInbvInitialize().

◆ IntVideoPortAddDevice()

NTSTATUS NTAPI IntVideoPortAddDevice ( IN PDRIVER_OBJECT  DriverObject,
IN PDEVICE_OBJECT  PhysicalDeviceObject 
)

Definition at line 334 of file dispatch.c.

337{
341
342 /* Get the initialization data we saved in VideoPortInitialize. */
344
345 /* Create adapter device object. */
349 DriverExtension->InitializationData.StartingDeviceNumber,
350 0,
351 &DeviceObject);
352 if (!NT_SUCCESS(Status))
353 {
354 ERR_(VIDEOPRT, "IntVideoPortCreateAdapterDeviceObject() failed with status 0x%lx\n", Status);
355 }
356 return Status;
357}
LONG NTSTATUS
Definition: precomp.h:26
PDEVICE_OBJECT PhysicalDeviceObject
Definition: btrfs_drv.h:1157
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
Status
Definition: gdiplustypes.h:25
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
Definition: driver.c:1904
PPCI_DRIVER_EXTENSION DriverExtension
Definition: pci.c:31
#define ERR_(ch,...)
Definition: debug.h:156
NTSTATUS NTAPI IntVideoPortCreateAdapterDeviceObject(_In_ PDRIVER_OBJECT DriverObject, _In_ PVIDEO_PORT_DRIVER_EXTENSION DriverExtension, _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject, _In_ USHORT AdapterNumber, _In_ USHORT DisplayNumber, _Out_opt_ PDEVICE_OBJECT *DeviceObject)
Definition: videoprt.c:159
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213

Referenced by VideoPortInitialize().

◆ IntVideoPortDispatchCleanup()

NTSTATUS NTAPI IntVideoPortDispatchCleanup ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 1123 of file dispatch.c.

1126{
1127 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
1128
1129 DeviceExtension = DeviceObject->DeviceExtension;
1130 RtlFreeUnicodeString(&DeviceExtension->RegistryPath);
1131
1132 Irp->IoStatus.Status = STATUS_SUCCESS;
1133 Irp->IoStatus.Information = 0;
1135
1136 return STATUS_SUCCESS;
1137}
_In_ PIRP Irp
Definition: csq.h:116
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define IoCompleteRequest
Definition: irp.c:1240
#define STATUS_SUCCESS
Definition: shellext.h:65
UNICODE_STRING RegistryPath
Definition: videoprt.h:90
#define IO_NO_INCREMENT
Definition: iotypes.h:598

◆ IntVideoPortDispatchClose()

NTSTATUS NTAPI IntVideoPortDispatchClose ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 436 of file dispatch.c.

439{
440 TRACE_(VIDEOPRT, "IntVideoPortDispatchClose\n");
441
443
444 Irp->IoStatus.Status = STATUS_SUCCESS;
446 return STATUS_SUCCESS;
447}
#define TRACE_(x)
Definition: compat.h:76
static NTSTATUS IntVideoPortInbvCleanup(IN PDEVICE_OBJECT DeviceObject)
Definition: dispatch.c:300

Referenced by VideoPortInitialize().

◆ IntVideoPortDispatchDeviceControl()

NTSTATUS NTAPI IntVideoPortDispatchDeviceControl ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 723 of file dispatch.c.

726{
727 PIO_STACK_LOCATION IrpStack;
730
731 TRACE_(VIDEOPRT, "IntVideoPortDispatchDeviceControl\n");
732
734
735 switch (IrpStack->MajorFunction)
736 {
738 /* This is the main part of this function and is handled below */
739 break;
740
741 case IRP_MJ_SHUTDOWN:
742 {
743 /* Dereference CSRSS */
744 PKPROCESS OldCsrProcess;
745 OldCsrProcess = InterlockedExchangePointer((PVOID*)&CsrProcess, NULL);
746 if (OldCsrProcess)
747 ObDereferenceObject(OldCsrProcess);
748
749 Irp->IoStatus.Status = STATUS_SUCCESS;
751 return STATUS_SUCCESS;
752 }
753
754 default:
755 ERR_(VIDEOPRT, "- Unknown MajorFunction 0x%x\n", IrpStack->MajorFunction);
756 Irp->IoStatus.Status = STATUS_SUCCESS;
758 return STATUS_SUCCESS;
759 }
760
761 IoControlCode = IrpStack->Parameters.DeviceIoControl.IoControlCode;
762
763 INFO_(VIDEOPRT, "- IoControlCode: 0x%x: %s\n", IoControlCode, IoctlName(IoControlCode));
764
765 switch (IoControlCode)
766 {
770 WARN_(VIDEOPRT, "- IOCTL_VIDEO_*_VDM are UNIMPLEMENTED!\n");
772 break;
773
776 WARN_(VIDEOPRT, "- IOCTL_VIDEO_GET/SET_OUTPUT_DEVICE_POWER_STATE are UNIMPLEMENTED!\n");
778 break;
779
782 WARN_(VIDEOPRT, "- IOCTL_VIDEO_GET/SET_POWER_MANAGEMENT are UNIMPLEMENTED!\n");
784 break;
785
789 WARN_(VIDEOPRT, "- IOCTL_VIDEO_*_BRIGHTNESS are UNIMPLEMENTED!\n");
791 break;
792
794 WARN_(VIDEOPRT, "- IOCTL_VIDEO_ENUM_MONITOR_PDO is UNIMPLEMENTED!\n");
796 break;
797
799 INFO_(VIDEOPRT, "- IOCTL_VIDEO_INIT_WIN32K_CALLBACKS\n");
801 Irp->AssociatedIrp.SystemBuffer,
802 IrpStack->Parameters.DeviceIoControl.InputBufferLength,
803 &Irp->IoStatus.Information);
804 break;
805
807 WARN_(VIDEOPRT, "- IOCTL_VIDEO_IS_VGA_DEVICE is UNIMPLEMENTED!\n");
809 break;
810
812 INFO_(VIDEOPRT, "- IOCTL_VIDEO_USE_DEVICE_IN_SESSION\n");
814 Irp->AssociatedIrp.SystemBuffer,
815 IrpStack->Parameters.DeviceIoControl.InputBufferLength,
816 &Irp->IoStatus.Information);
817 break;
818
820 INFO_(VIDEOPRT, "- IOCTL_VIDEO_PREPARE_FOR_EARECOVERY\n");
821 /*
822 * The Win32k Watchdog Timer detected that a thread spent more time
823 * in a display driver than the allotted time its threshold specified,
824 * and thus is going to attempt to recover by switching to VGA mode.
825 * If this attempt fails, the watchdog generates bugcheck 0xEA
826 * "THREAD_STUCK_IN_DEVICE_DRIVER".
827 *
828 * Prepare the recovery by resetting the display adapters to
829 * standard VGA 80x25 text mode.
830 */
833 break;
834
835 default:
836 /* Forward to the Miniport Driver */
838 break;
839 }
840
841 INFO_(VIDEOPRT, "- Returned status: 0x%x\n", Status);
842
843 Irp->IoStatus.Status = Status;
845 return Status;
846}
#define NULL
Definition: types.h:112
#define InterlockedExchangePointer(Target, Value)
Definition: dshow.h:45
#define IOCTL_VIDEO_SET_POWER_MANAGEMENT
Definition: ntddvdeo.h:239
#define IOCTL_VIDEO_IS_VGA_DEVICE
Definition: ntddvdeo.h:137
#define IOCTL_VIDEO_ENABLE_VDM
Definition: ntddvdeo.h:110
#define IOCTL_VIDEO_USE_DEVICE_IN_SESSION
Definition: ntddvdeo.h:140
#define IOCTL_VIDEO_GET_POWER_MANAGEMENT
Definition: ntddvdeo.h:167
#define IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS
Definition: ntddvdeo.h:266
#define IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS
Definition: ntddvdeo.h:269
#define IOCTL_VIDEO_PREPARE_FOR_EARECOVERY
Definition: ntddvdeo.h:143
#define IOCTL_VIDEO_DISABLE_VDM
Definition: ntddvdeo.h:113
#define IOCTL_VIDEO_GET_OUTPUT_DEVICE_POWER_STATE
Definition: ntddvdeo.h:122
#define IOCTL_VIDEO_REGISTER_VDM
Definition: ntddvdeo.h:116
#define IOCTL_VIDEO_ENUM_MONITOR_PDO
Definition: ntddvdeo.h:128
#define IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE
Definition: ntddvdeo.h:119
#define IOCTL_VIDEO_INIT_WIN32K_CALLBACKS
Definition: ntddvdeo.h:131
#define IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS
Definition: ntddvdeo.h:263
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:239
#define IRP_MJ_DEVICE_CONTROL
Definition: rdpdr.c:52
#define INFO_(ch,...)
Definition: debug.h:159
#define WARN_(ch,...)
Definition: debug.h:157
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
Definition: iotypes.h:3128
uint32_t ULONG
Definition: typedefs.h:59
PKPROCESS CsrProcess
Definition: videoprt.c:39
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
Definition: wdfio.h:325
static BOOLEAN NTAPI IntVideoPortResetDisplayParametersEx(_In_ ULONG Columns, _In_ ULONG Rows, _In_ BOOLEAN CalledByInbv)
Definition: dispatch.c:72
PSTR IoctlName(ULONG Ioctl)
Definition: dispatch.c:450
static NTSTATUS VideoPortForwardDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: dispatch.c:656
static NTSTATUS VideoPortUseDeviceInSession(_Inout_ PDEVICE_OBJECT DeviceObject, _Inout_ PVIDEO_DEVICE_SESSION_STATUS SessionState, _In_ ULONG BufferLength, _Out_ PULONG_PTR Information)
Definition: dispatch.c:569
static NTSTATUS VideoPortInitWin32kCallbacks(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PVIDEO_WIN32K_CALLBACKS Win32kCallbacks, _In_ ULONG BufferLength, _Out_ PULONG_PTR Information)
Definition: dispatch.c:627
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2793
#define IRP_MJ_SHUTDOWN
#define IO_VIDEO_INCREMENT
Definition: iotypes.h:609
#define ObDereferenceObject
Definition: obfuncs.h:203

Referenced by VideoPortInitialize().

◆ IntVideoPortDispatchFdoPnp()

NTSTATUS NTAPI IntVideoPortDispatchFdoPnp ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 1032 of file dispatch.c.

1035{
1038 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
1039
1041
1042 switch (IrpSp->MinorFunction)
1043 {
1046 if (NT_SUCCESS(Status) && NT_SUCCESS(Irp->IoStatus.Status))
1048 Irp->IoStatus.Status = Status;
1049 Irp->IoStatus.Information = 0;
1051 break;
1052
1054 /* Call lower drivers, and ignore result (that's probably STATUS_NOT_SUPPORTED) */
1056 /* Now, fill resource requirements list */
1058 Irp->IoStatus.Status = Status;
1060 break;
1061
1063 if (IrpSp->Parameters.QueryDeviceRelations.Type != BusRelations)
1064 {
1066 Status = IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
1067 }
1068 else
1069 {
1071 Irp->IoStatus.Status = Status;
1073 }
1074 break;
1075
1080
1081 case IRP_MN_STOP_DEVICE:
1083 if (NT_SUCCESS(Status) && NT_SUCCESS(Irp->IoStatus.Status))
1085 Irp->IoStatus.Status = Status;
1086 Irp->IoStatus.Information = 0;
1088 break;
1089
1093 Irp->IoStatus.Status = STATUS_SUCCESS;
1094 Irp->IoStatus.Information = 0;
1096 break;
1097
1098 default:
1099 Status = Irp->IoStatus.Status;
1101 break;
1102 }
1103
1104 return Status;
1105}
#define VOID
Definition: acefi.h:82
_In_ PIO_STACK_LOCATION IrpSp
Definition: create.c:4137
#define IRP_MN_SURPRISE_REMOVAL
Definition: ntifs_ex.h:408
#define IoSkipCurrentIrpStackLocation(Irp)
Definition: ntifs_ex.h:421
#define IoCallDriver
Definition: irp.c:1225
PDEVICE_OBJECT NextDeviceObject
Definition: videoprt.h:89
NTSTATUS NTAPI IntVideoPortForwardIrpAndWait(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: dispatch.c:1004
NTSTATUS NTAPI IntVideoPortQueryBusRelations(PDEVICE_OBJECT DeviceObject, PIRP Irp)
Definition: dispatch.c:944
NTSTATUS NTAPI IntVideoPortPnPStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: dispatch.c:850
NTSTATUS NTAPI IntVideoPortFilterResourceRequirements(IN PDEVICE_OBJECT DeviceObject, IN PIO_STACK_LOCATION IrpStack, IN PIRP Irp)
Definition: resource.c:77
#define IRP_MN_CANCEL_STOP_DEVICE
@ BusRelations
Definition: iotypes.h:2152
#define IRP_MN_START_DEVICE
#define IRP_MN_REMOVE_DEVICE
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define IRP_MN_QUERY_STOP_DEVICE
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define IRP_MN_STOP_DEVICE
#define IRP_MN_QUERY_REMOVE_DEVICE

Referenced by IntVideoPortDispatchPnp().

◆ IntVideoPortDispatchOpen()

NTSTATUS NTAPI IntVideoPortDispatchOpen ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 369 of file dispatch.c.

372{
374 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
376
377 TRACE_(VIDEOPRT, "IntVideoPortDispatchOpen\n");
378
379 if (!CsrProcess)
380 {
381 /*
382 * We know the first open call will be from the CSRSS process
383 * to let us know its handle.
384 */
385 INFO_(VIDEOPRT, "Referencing CSRSS\n");
388 INFO_(VIDEOPRT, "CsrProcess 0x%p\n", CsrProcess);
389
391 if (!NT_SUCCESS(Status))
392 {
393 ERR_(VIDEOPRT, "IntInitializeVideoAddressSpace() failed: 0x%lx\n", Status);
396 return Status;
397 }
398 }
399
400 DeviceExtension = (PVIDEO_PORT_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
401 DriverExtension = DeviceExtension->DriverExtension;
402
403 // FIXME: (Re-)initialize INBV only if DeviceObject doesn't belong to a mirror driver.
405
406 if (DriverExtension->InitializationData.HwInitialize(&DeviceExtension->MiniPortDeviceExtension))
407 {
409 InterlockedIncrement((PLONG)&DeviceExtension->DeviceOpened);
410
411 /* Query children, now that device is opened */
413 }
414 else
415 {
417 }
418
419 Irp->IoStatus.Status = Status;
420 Irp->IoStatus.Information = FILE_OPENED;
422
423 return Status;
424}
#define InterlockedIncrement
Definition: armddk.h:53
NTSTATUS NTAPI IntInitializeVideoAddressSpace(VOID)
Definition: int10.c:200
#define FILE_OPENED
Definition: nt_native.h:769
VPAPI VP_STATUS NTAPI VideoPortEnumerateChildren(IN PVOID HwDeviceExtension, IN PVOID Reserved)
Definition: videoprt.c:1444
VIDEO_PORT_DRIVER_EXTENSION * DriverExtension
Definition: videoprt.h:103
CHAR POINTER_ALIGNMENT MiniPortDeviceExtension[1]
Definition: videoprt.h:113
int32_t * PLONG
Definition: typedefs.h:58
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
struct _VIDEO_PORT_DEVICE_EXTENSTION * PVIDEO_PORT_DEVICE_EXTENSION
struct _KPROCESS * PKPROCESS
Definition: wdm.template.h:201
static NTSTATUS IntVideoPortInbvInitialize(VOID)
Definition: dispatch.c:274
#define ObReferenceObject
Definition: obfuncs.h:204
#define PsGetCurrentProcess
Definition: psfuncs.h:17

Referenced by VideoPortInitialize().

◆ IntVideoPortDispatchPnp()

NTSTATUS NTAPI IntVideoPortDispatchPnp ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 1109 of file dispatch.c.

1112{
1113 PVIDEO_PORT_COMMON_EXTENSION CommonExtension = DeviceObject->DeviceExtension;
1114
1115 if (CommonExtension->Fdo)
1117 else
1119}
NTSTATUS NTAPI IntVideoPortDispatchPdoPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: child.c:386
NTSTATUS NTAPI IntVideoPortDispatchFdoPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: dispatch.c:1032

Referenced by VideoPortInitialize().

◆ IntVideoPortDispatchPower()

NTSTATUS NTAPI IntVideoPortDispatchPower ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 1141 of file dispatch.c.

1144{
1146 NTSTATUS Status = Irp->IoStatus.Status;
1147 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
1148
1150
1151 if (DeviceExtension->Common.Fdo)
1152 {
1155 return PoCallDriver(DeviceExtension->NextDeviceObject, Irp);
1156 }
1157 else
1158 {
1159 switch (IrpSp->MinorFunction)
1160 {
1161 case IRP_MN_QUERY_POWER:
1162 case IRP_MN_SET_POWER:
1164 break;
1165 }
1167 Irp->IoStatus.Status = Status;
1169 return Status;
1170 }
1171}
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
Definition: power.c:758
VIDEO_PORT_COMMON_EXTENSION Common
Definition: videoprt.h:84
#define IRP_MN_SET_POWER
#define IRP_MN_QUERY_POWER

Referenced by VideoPortInitialize().

◆ IntVideoPortDispatchSystemControl()

NTSTATUS NTAPI IntVideoPortDispatchSystemControl ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 1175 of file dispatch.c.

1178{
1180 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
1181
1182 if (DeviceExtension->Common.Fdo)
1183 {
1185 return IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
1186 }
1187 else
1188 {
1189 Status = Irp->IoStatus.Status;
1191 return Status;
1192 }
1193}

Referenced by VideoPortInitialize().

◆ IntVideoPortForwardIrpAndWait()

NTSTATUS NTAPI IntVideoPortForwardIrpAndWait ( PDEVICE_OBJECT  DeviceObject,
PIRP  Irp 
)

Definition at line 1004 of file dispatch.c.

1005{
1006 KEVENT Event;
1008 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension =
1010
1015 &Event,
1016 TRUE,
1017 TRUE,
1018 TRUE);
1019
1020 Status = IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
1021 if (Status == STATUS_PENDING)
1022 {
1024 Status = Irp->IoStatus.Status;
1025 }
1026
1027 return Status;
1028}
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
Definition: env_spec_w32.h:478
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
Definition: irp.cpp:490
@ NotificationEvent
#define IoCopyCurrentIrpStackLocationToNext(Irp)
Definition: ntifs_ex.h:413
#define STATUS_PENDING
Definition: ntstatus.h:82
NTSTATUS NTAPI IntVideoPortForwardIrpAndWaitCompletionRoutine(PDEVICE_OBJECT Fdo, PIRP Irp, PVOID Context)
Definition: dispatch.c:929
@ Executive
Definition: ketypes.h:415

Referenced by IntVideoPortDispatchFdoPnp().

◆ IntVideoPortForwardIrpAndWaitCompletionRoutine()

NTSTATUS NTAPI IntVideoPortForwardIrpAndWaitCompletionRoutine ( PDEVICE_OBJECT  Fdo,
PIRP  Irp,
PVOID  Context 
)

Definition at line 929 of file dispatch.c.

933{
935
936 if (Irp->PendingReturned)
938
940}
#define KeSetEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:476
#define STATUS_MORE_PROCESSING_REQUIRED
Definition: shellext.h:68

Referenced by IntVideoPortForwardIrpAndWait().

◆ IntVideoPortInbvCleanup()

static NTSTATUS IntVideoPortInbvCleanup ( IN PDEVICE_OBJECT  DeviceObject)
static

Definition at line 300 of file dispatch.c.

302{
303 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
304 // HANDLE ThreadHandle;
305
306 DeviceExtension = (PVIDEO_PORT_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
307 if ((DeviceExtension->DeviceOpened >= 1) &&
308 (InterlockedDecrement((PLONG)&DeviceExtension->DeviceOpened) == 0))
309 {
310 // RemoveEntryList(&DeviceExtension->HwResetListEntry);
313 // or InbvAcquireDisplayOwnership(); ?
314 }
315
316#if 0
317 // TODO: Find the best way to communicate the request.
318 /* Signal the INBV monitoring thread and wait for it to terminate */
320 if (ThreadHandle)
321 {
323 /* Close its handle */
324 ObCloseHandle(ThreadHandle, KernelMode);
325 }
326#endif
327
328 return STATUS_SUCCESS;
329}
#define InterlockedDecrement
Definition: armddk.h:52
if(dx< 0)
Definition: linetemp.h:194
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
Definition: obhandle.c:3379
static HANDLE InbvThreadHandle
Definition: dispatch.c:34

Referenced by IntVideoPortDispatchClose().

◆ IntVideoPortInbvInitialize()

static NTSTATUS IntVideoPortInbvInitialize ( VOID  )
static

Definition at line 274 of file dispatch.c.

275{
276 /* Create the INBV monitoring thread if needed */
277 if (!InbvThreadHandle)
278 {
281
283 0,
285 NULL,
286 NULL,
288 NULL);
289 if (!NT_SUCCESS(Status))
291 }
292
293 /* Re-register the display reset callback with INBV */
295
296 return STATUS_SUCCESS;
297}
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
#define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
Definition: thread.c:602
static VOID NTAPI InbvMonitorThread(_In_ PVOID Context)
Definition: dispatch.c:208

Referenced by IntVideoPortDispatchOpen().

◆ IntVideoPortPnPStartDevice()

NTSTATUS NTAPI IntVideoPortPnPStartDevice ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 850 of file dispatch.c.

853{
857 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
859
860 /* Get the initialization data we saved in VideoPortInitialize.*/
861 DriverObject = DeviceObject->DriverObject;
863 DeviceExtension = (PVIDEO_PORT_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
864
865 /* Store some resources in the DeviceExtension. */
866 AllocatedResources = Stack->Parameters.StartDevice.AllocatedResources;
868 {
872 ULONG ResourceListSize;
873
874 /* Save the resource list */
875 ResourceCount = AllocatedResources->List[0].PartialResourceList.Count;
876 ResourceListSize =
877 FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.
878 PartialDescriptors[ResourceCount]);
879 DeviceExtension->AllocatedResources = ExAllocatePool(PagedPool, ResourceListSize);
880 if (DeviceExtension->AllocatedResources == NULL)
881 {
883 }
884
885 RtlCopyMemory(DeviceExtension->AllocatedResources,
887 ResourceListSize);
888
889 /* Get the interrupt level/vector - needed by HwFindAdapter sometimes */
890 FullList = AllocatedResources->List;
891 ASSERT(AllocatedResources->Count == 1);
892 INFO_(VIDEOPRT, "InterfaceType %u BusNumber List %u Device BusNumber %u Version %u Revision %u\n",
893 FullList->InterfaceType, FullList->BusNumber, DeviceExtension->SystemIoBusNumber, FullList->PartialResourceList.Version, FullList->PartialResourceList.Revision);
894
895 /* FIXME: Is this ASSERT ok for resources from the PNP manager? */
896 ASSERT(FullList->InterfaceType == PCIBus);
897 ASSERT(FullList->BusNumber == DeviceExtension->SystemIoBusNumber);
898 ASSERT(1 == FullList->PartialResourceList.Version);
899 ASSERT(1 == FullList->PartialResourceList.Revision);
901 Descriptor < FullList->PartialResourceList.PartialDescriptors + FullList->PartialResourceList.Count;
902 Descriptor++)
903 {
905 {
906 DeviceExtension->InterruptLevel = Descriptor->u.Interrupt.Level;
907 DeviceExtension->InterruptVector = Descriptor->u.Interrupt.Vector;
908 if (Descriptor->ShareDisposition == CmResourceShareShared)
909 DeviceExtension->InterruptShared = TRUE;
910 else
911 DeviceExtension->InterruptShared = FALSE;
912 }
913 }
914 }
915
916 INFO_(VIDEOPRT, "Interrupt level: 0x%x Interrupt Vector: 0x%x\n",
917 DeviceExtension->InterruptLevel,
918 DeviceExtension->InterruptVector);
919
920 /* Create adapter device object. */
924}
#define PagedPool
Definition: env_spec_w32.h:308
#define ExAllocatePool(type, size)
Definition: fbtusb.h:44
@ PCIBus
Definition: hwresource.cpp:142
#define CmResourceTypeInterrupt
Definition: hwresource.cpp:124
static ULONG ResourceCount
Definition: inbv.c:50
#define ASSERT(a)
Definition: mode.c:44
_Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PCM_RESOURCE_LIST * AllocatedResources
Definition: ndis.h:4643
CM_PARTIAL_RESOURCE_LIST PartialResourceList
Definition: hwresource.cpp:160
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
PCM_RESOURCE_LIST AllocatedResources
Definition: videoprt.h:94
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
NTSTATUS NTAPI IntVideoPortFindAdapter(IN PDRIVER_OBJECT DriverObject, IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension, IN PDEVICE_OBJECT DeviceObject)
Definition: videoprt.c:414
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
@ CmResourceShareShared
Definition: cmtypes.h:243

Referenced by IntVideoPortDispatchFdoPnp().

◆ IntVideoPortQueryBusRelations()

NTSTATUS NTAPI IntVideoPortQueryBusRelations ( PDEVICE_OBJECT  DeviceObject,
PIRP  Irp 
)

Definition at line 944 of file dispatch.c.

945{
946 PDEVICE_RELATIONS DeviceRelations;
947 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
948 PVIDEO_PORT_CHILD_EXTENSION ChildExtension;
949 ULONG i;
950 PLIST_ENTRY CurrentEntry;
952
953 if (InterlockedCompareExchange((PLONG)&DeviceExtension->DeviceOpened, 0, 0) == 0)
954 {
955 /* Device not opened. Don't enumerate children yet */
956 WARN_(VIDEOPRT, "Skipping child enumeration because device is not opened");
958 }
959 /* Query children of the device. */
961 if (!NT_SUCCESS(Status))
962 return Status;
963
964 /* Count the children */
965 i = 0;
966 CurrentEntry = DeviceExtension->ChildDeviceList.Flink;
967 while (CurrentEntry != &DeviceExtension->ChildDeviceList)
968 {
969 i++;
970 CurrentEntry = CurrentEntry->Flink;
971 }
972
973 if (i == 0)
974 return Irp->IoStatus.Status;
975
976 DeviceRelations = ExAllocatePool(PagedPool,
977 sizeof(DEVICE_RELATIONS) + ((i - 1) * sizeof(PVOID)));
978 if (!DeviceRelations) return STATUS_NO_MEMORY;
979
980 DeviceRelations->Count = i;
981
982 /* Add the children */
983 i = 0;
984 CurrentEntry = DeviceExtension->ChildDeviceList.Flink;
985 while (CurrentEntry != &DeviceExtension->ChildDeviceList)
986 {
987 ChildExtension = CONTAINING_RECORD(CurrentEntry, VIDEO_PORT_CHILD_EXTENSION, ListEntry);
988
990 DeviceRelations->Objects[i] = ChildExtension->PhysicalDeviceObject;
991
992 i++;
993 CurrentEntry = CurrentEntry->Flink;
994 }
995
996 INFO_(VIDEOPRT, "Reported %d PDOs\n", i);
997 Irp->IoStatus.Information = (ULONG_PTR)DeviceRelations;
998
999 return STATUS_SUCCESS;
1000}
#define InterlockedCompareExchange
Definition: interlocked.h:104
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260
PDEVICE_OBJECT Objects[1]
Definition: iotypes.h:2163
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
PDEVICE_OBJECT PhysicalDeviceObject
Definition: videoprt.h:127
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
NTSTATUS NTAPI IntVideoPortEnumerateChildren(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: videoprt.c:1280

Referenced by IntVideoPortDispatchFdoPnp().

◆ IntVideoPortResetDisplayParameters()

static BOOLEAN NTAPI IntVideoPortResetDisplayParameters ( ULONG  Columns,
ULONG  Rows 
)
static

Definition at line 168 of file dispatch.c.

169{
170 /* Call the extended function, specifying we were called by INBV */
172}
static const COLUMN_LIST Columns[]
Definition: listview.c:19
_In_ ULONG Rows
Definition: haltypes.h:7

Referenced by InbvMonitorThread(), and IntVideoPortInbvInitialize().

◆ IntVideoPortResetDisplayParametersEx()

static BOOLEAN NTAPI IntVideoPortResetDisplayParametersEx ( _In_ ULONG  Columns,
_In_ ULONG  Rows,
_In_ BOOLEAN  CalledByInbv 
)
static

Definition at line 72 of file dispatch.c.

76{
77 BOOLEAN Success = TRUE; // Suppose we don't need to perform a full reset.
79 PLIST_ENTRY PrevEntry, Entry;
80 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
82
83 /* Check if we are at dispatch level or lower, and acquire the lock */
86 {
87 /* Loop until the lock is free, then raise IRQL to dispatch level */
90 }
92
93 /* Bail out early if we don't have any resettable adapter */
95 {
96 Success = FALSE; // No adapter found: request HAL to perform a full reset.
97 goto Quit;
98 }
99
100 /*
101 * If we have been unexpectedly called via a callback from
102 * InbvAcquireDisplayOwnership(), start monitoring INBV.
103 */
104 if (CalledByInbv)
106
107 for (PrevEntry = &HwResetAdaptersList, Entry = PrevEntry->Flink;
109 PrevEntry = Entry, Entry = Entry->Flink)
110 {
111 /*
112 * Check whether the entry address is properly aligned,
113 * the device and driver extensions must be readable and
114 * the device extension properly back-linked to the last entry.
115 */
116// #define IS_ALIGNED(addr, align) (((ULONG64)(addr) & (align - 1)) == 0)
117 if (((ULONG_PTR)Entry & (sizeof(ULONG_PTR) - 1)) != 0)
118 {
119 Success = FALSE; // We failed: request HAL to perform a full reset.
120 goto Quit;
121 }
122
123 DeviceExtension = CONTAINING_RECORD(Entry,
125 HwResetListEntry);
126 /*
127 * As this function can be called as part of the INBV initialization
128 * by the bugcheck code, avoid any problems and protect all accesses
129 * within SEH.
130 */
132 {
133 DriverExtension = DeviceExtension->DriverExtension;
135
136 if (DeviceExtension->HwResetListEntry.Blink != PrevEntry)
137 {
138 Success = FALSE; // We failed: request HAL to perform a full reset.
139 _SEH2_YIELD(goto Quit);
140 }
141
142 if ((DeviceExtension->DeviceOpened >= 1) &&
143 (DriverExtension->InitializationData.HwResetHw != NULL))
144 {
145 Success &= DriverExtension->InitializationData.HwResetHw(
146 &DeviceExtension->MiniPortDeviceExtension,
147 Columns, Rows);
148 }
149 }
151 {
152 }
153 _SEH2_END;
154 }
155
156Quit:
157 /* Release the lock and restore the old IRQL if we were at dispatch level or lower */
159 if (OldIrql <= DISPATCH_LEVEL)
161
162 return Success;
163}
unsigned char BOOLEAN
#define IsListEmpty(ListHead)
Definition: env_spec_w32.h:954
UCHAR KIRQL
Definition: env_spec_w32.h:591
#define KeRaiseIrql(irql, oldIrql)
Definition: env_spec_w32.h:597
#define KeLowerIrql(oldIrql)
Definition: env_spec_w32.h:602
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
@ Success
Definition: eventcreate.c:712
#define _SEH2_END
Definition: filesup.c:22
#define _SEH2_TRY
Definition: filesup.c:19
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
BOOLEAN FASTCALL KeTestSpinLock(IN PKSPIN_LOCK SpinLock)
Definition: spinlock.c:475
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:34
#define _SEH2_YIELD(__stmt)
Definition: pseh2_64.h:162
#define KeAcquireSpinLockAtDpcLevel(SpinLock)
Definition: ke.h:125
#define KeReleaseSpinLockFromDpcLevel(SpinLock)
Definition: ke.h:135
base of all file and directory entries
Definition: entries.h:83
struct _LIST_ENTRY * Blink
Definition: typedefs.h:122
uint32_t ULONG_PTR
Definition: typedefs.h:65
KSPIN_LOCK HwResetAdaptersLock
Definition: videoprt.c:43
LIST_ENTRY HwResetAdaptersList
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778

Referenced by IntVideoPortDispatchDeviceControl(), IntVideoPortInbvCleanup(), and IntVideoPortResetDisplayParameters().

◆ IntVideoPortUnload()

VOID NTAPI IntVideoPortUnload ( PDRIVER_OBJECT  DriverObject)

Definition at line 1197 of file dispatch.c.

1198{
1199}

Referenced by VideoPortInitialize().

◆ IoctlName()

PSTR IoctlName ( ULONG  Ioctl)

Definition at line 450 of file dispatch.c.

451{
452 switch (Ioctl)
453 {
455 return "IOCTL_VIDEO_ENABLE_VDM"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x00, METHOD_BUFFERED, FILE_ANY_ACCESS)
457 return "IOCTL_VIDEO_DISABLE_VDM"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x01, METHOD_BUFFERED, FILE_ANY_ACCESS)
459 return "IOCTL_VIDEO_REGISTER_VDM"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x02, METHOD_BUFFERED, FILE_ANY_ACCESS)
461 return "IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x03, METHOD_BUFFERED, FILE_ANY_ACCESS)
463 return "IOCTL_VIDEO_GET_OUTPUT_DEVICE_POWER_STATE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x04, METHOD_BUFFERED, FILE_ANY_ACCESS)
465 return "IOCTL_VIDEO_MONITOR_DEVICE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x05, METHOD_BUFFERED, FILE_ANY_ACCESS)
467 return "IOCTL_VIDEO_ENUM_MONITOR_PDO"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x06, METHOD_BUFFERED, FILE_ANY_ACCESS)
469 return "IOCTL_VIDEO_INIT_WIN32K_CALLBACKS"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x07, METHOD_BUFFERED, FILE_ANY_ACCESS)
471 return "IOCTL_VIDEO_HANDLE_VIDEOPARAMETERS"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x08, METHOD_BUFFERED, FILE_ANY_ACCESS)
473 return "IOCTL_VIDEO_IS_VGA_DEVICE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x09, METHOD_BUFFERED, FILE_ANY_ACCESS)
475 return "IOCTL_VIDEO_USE_DEVICE_IN_SESSION"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x0a, METHOD_BUFFERED, FILE_ANY_ACCESS)
477 return "IOCTL_VIDEO_PREPARE_FOR_EARECOVERY"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x0b, METHOD_BUFFERED, FILE_ANY_ACCESS)
479 return "IOCTL_VIDEO_SAVE_HARDWARE_STATE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x80, METHOD_BUFFERED, FILE_ANY_ACCESS)
481 return "IOCTL_VIDEO_RESTORE_HARDWARE_STATE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x81, METHOD_BUFFERED, FILE_ANY_ACCESS)
483 return "IOCTL_VIDEO_QUERY_AVAIL_MODES"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x100, METHOD_BUFFERED, FILE_ANY_ACCESS)
485 return "IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x101, METHOD_BUFFERED, FILE_ANY_ACCESS)
487 return "IOCTL_VIDEO_QUERY_CURRENT_MODE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x102, METHOD_BUFFERED, FILE_ANY_ACCESS)
489 return "IOCTL_VIDEO_SET_CURRENT_MODE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x103, METHOD_BUFFERED, FILE_ANY_ACCESS)
491 return "IOCTL_VIDEO_RESET_DEVICE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x104, METHOD_BUFFERED, FILE_ANY_ACCESS)
493 return "IOCTL_VIDEO_LOAD_AND_SET_FONT"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x105, METHOD_BUFFERED, FILE_ANY_ACCESS)
495 return "IOCTL_VIDEO_SET_PALETTE_REGISTERS"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x106, METHOD_BUFFERED, FILE_ANY_ACCESS)
497 return "IOCTL_VIDEO_SET_COLOR_REGISTERS"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x107, METHOD_BUFFERED, FILE_ANY_ACCESS)
499 return "IOCTL_VIDEO_ENABLE_CURSOR"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x108, METHOD_BUFFERED, FILE_ANY_ACCESS)
501 return "IOCTL_VIDEO_DISABLE_CURSOR"; // CTL_CODE (FILE_DEVICE_VIDEO, 0x109, METHOD_BUFFERED, FILE_ANY_ACCESS)
503 return "IOCTL_VIDEO_SET_CURSOR_ATTR"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x10a, METHOD_BUFFERED, FILE_ANY_ACCESS)
505 return "IOCTL_VIDEO_QUERY_CURSOR_ATTR"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x10b, METHOD_BUFFERED, FILE_ANY_ACCESS)
507 return "IOCTL_VIDEO_SET_CURSOR_POSITION"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x10c, METHOD_BUFFERED, FILE_ANY_ACCESS)
509 return "IOCTL_VIDEO_QUERY_CURSOR_POSITION"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x10d, METHOD_BUFFERED, FILE_ANY_ACCESS)
511 return "IOCTL_VIDEO_ENABLE_POINTER"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x10e, METHOD_BUFFERED, FILE_ANY_ACCESS)
513 return "IOCTL_VIDEO_DISABLE_POINTER"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x10f, METHOD_BUFFERED, FILE_ANY_ACCESS)
515 return "IOCTL_VIDEO_SET_POINTER_ATTR"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x110, METHOD_BUFFERED, FILE_ANY_ACCESS)
517 return "IOCTL_VIDEO_QUERY_POINTER_ATTR"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x111, METHOD_BUFFERED, FILE_ANY_ACCESS)
519 return "IOCTL_VIDEO_SET_POINTER_POSITION"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x112, METHOD_BUFFERED, FILE_ANY_ACCESS)
521 return "IOCTL_VIDEO_QUERY_POINTER_POSITION"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x113, METHOD_BUFFERED, FILE_ANY_ACCESS)
523 return "IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x114, METHOD_BUFFERED, FILE_ANY_ACCESS)
525 return "IOCTL_VIDEO_GET_BANK_SELECT_CODE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x115, METHOD_BUFFERED, FILE_ANY_ACCESS)
527 return "IOCTL_VIDEO_MAP_VIDEO_MEMORY"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x116, METHOD_BUFFERED, FILE_ANY_ACCESS)
529 return "IOCTL_VIDEO_UNMAP_VIDEO_MEMORY"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x117, METHOD_BUFFERED, FILE_ANY_ACCESS)
531 return "IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x118, METHOD_BUFFERED, FILE_ANY_ACCESS)
533 return "IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x119, METHOD_BUFFERED, FILE_ANY_ACCESS)
535 return "IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x11a, METHOD_BUFFERED, FILE_ANY_ACCESS)
537 return "IOCTL_VIDEO_SET_POWER_MANAGEMENT"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x11b, METHOD_BUFFERED, FILE_ANY_ACCESS)
539 return "IOCTL_VIDEO_GET_POWER_MANAGEMENT"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x11c, METHOD_BUFFERED, FILE_ANY_ACCESS)
541 return "IOCTL_VIDEO_SHARE_VIDEO_MEMORY"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x11d, METHOD_BUFFERED, FILE_ANY_ACCESS)
543 return "IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x11e, METHOD_BUFFERED, FILE_ANY_ACCESS)
545 return "IOCTL_VIDEO_SET_COLOR_LUT_DATA"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x11f, METHOD_BUFFERED, FILE_ANY_ACCESS)
547 return "IOCTL_VIDEO_GET_CHILD_STATE"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x120, METHOD_BUFFERED, FILE_ANY_ACCESS)
549 return "IOCTL_VIDEO_VALIDATE_CHILD_STATE_CONFIGURATION"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x121, METHOD_BUFFERED, FILE_ANY_ACCESS)
551 return "IOCTL_VIDEO_SET_CHILD_STATE_CONFIGURATION"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x122, METHOD_BUFFERED, FILE_ANY_ACCESS)
553 return "IOCTL_VIDEO_SWITCH_DUALVIEW"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x123, METHOD_BUFFERED, FILE_ANY_ACCESS)
555 return "IOCTL_VIDEO_SET_BANK_POSITION"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x124, METHOD_BUFFERED, FILE_ANY_ACCESS)
557 return "IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x125, METHOD_BUFFERED, FILE_ANY_ACCESS)
559 return "IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x126, METHOD_BUFFERED, FILE_ANY_ACCESS)
561 return "IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS"; // CTL_CODE(FILE_DEVICE_VIDEO, 0x127, METHOD_BUFFERED, FILE_ANY_ACCESS)
562 }
563
564 return "<unknown ioctl code>";
565}
_Must_inspect_result_ __in WDFIOTARGET __in_opt WDFREQUEST __in ULONG Ioctl
#define IOCTL_VIDEO_SWITCH_DUALVIEW
Definition: ntddvdeo.h:245
#define IOCTL_VIDEO_SHARE_VIDEO_MEMORY
Definition: ntddvdeo.h:242
#define IOCTL_VIDEO_MAP_VIDEO_MEMORY
Definition: ntddvdeo.h:173
#define IOCTL_VIDEO_ENABLE_POINTER
Definition: ntddvdeo.h:155
#define IOCTL_VIDEO_SET_PALETTE_REGISTERS
Definition: ntddvdeo.h:230
#define IOCTL_VIDEO_SET_POINTER_ATTR
Definition: ntddvdeo.h:233
#define IOCTL_VIDEO_UNMAP_VIDEO_MEMORY
Definition: ntddvdeo.h:248
#define IOCTL_VIDEO_HANDLE_VIDEOPARAMETERS
Definition: ntddvdeo.h:134
#define IOCTL_VIDEO_QUERY_CURSOR_ATTR
Definition: ntddvdeo.h:185
#define IOCTL_VIDEO_QUERY_CURSOR_POSITION
Definition: ntddvdeo.h:188
#define IOCTL_VIDEO_SET_CURSOR_POSITION
Definition: ntddvdeo.h:227
#define IOCTL_VIDEO_QUERY_CURRENT_MODE
Definition: ntddvdeo.h:182
#define IOCTL_VIDEO_SET_BANK_POSITION
Definition: ntddvdeo.h:260
#define IOCTL_VIDEO_MONITOR_DEVICE
Definition: ntddvdeo.h:125
#define IOCTL_VIDEO_ENABLE_CURSOR
Definition: ntddvdeo.h:152
#define IOCTL_VIDEO_DISABLE_CURSOR
Definition: ntddvdeo.h:146
#define IOCTL_VIDEO_GET_CHILD_STATE
Definition: ntddvdeo.h:164
#define IOCTL_VIDEO_SET_POINTER_POSITION
Definition: ntddvdeo.h:236
#define IOCTL_VIDEO_SET_CURRENT_MODE
Definition: ntddvdeo.h:221
#define IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES
Definition: ntddvdeo.h:158
#define IOCTL_VIDEO_GET_BANK_SELECT_CODE
Definition: ntddvdeo.h:161
#define IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES
Definition: ntddvdeo.h:197
#define IOCTL_VIDEO_SET_COLOR_REGISTERS
Definition: ntddvdeo.h:218
#define IOCTL_VIDEO_VALIDATE_CHILD_STATE_CONFIGURATION
Definition: ntddvdeo.h:257
#define IOCTL_VIDEO_SET_COLOR_LUT_DATA
Definition: ntddvdeo.h:254
#define IOCTL_VIDEO_LOAD_AND_SET_FONT
Definition: ntddvdeo.h:170
#define IOCTL_VIDEO_RESET_DEVICE
Definition: ntddvdeo.h:206
#define IOCTL_VIDEO_QUERY_POINTER_POSITION
Definition: ntddvdeo.h:200
#define IOCTL_VIDEO_SET_CURSOR_ATTR
Definition: ntddvdeo.h:224
#define IOCTL_VIDEO_SET_CHILD_STATE_CONFIGURATION
Definition: ntddvdeo.h:215
#define IOCTL_VIDEO_DISABLE_POINTER
Definition: ntddvdeo.h:149
#define IOCTL_VIDEO_QUERY_POINTER_ATTR
Definition: ntddvdeo.h:194
#define IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY
Definition: ntddvdeo.h:251
#define IOCTL_VIDEO_QUERY_AVAIL_MODES
Definition: ntddvdeo.h:176
#define IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES
Definition: ntddvdeo.h:179
#define IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES
Definition: ntddvdeo.h:191
#define IOCTL_VIDEO_SAVE_HARDWARE_STATE
Definition: ntddvdeo.h:212
#define IOCTL_VIDEO_RESTORE_HARDWARE_STATE
Definition: ntddvdeo.h:209
#define IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES
Definition: ntddvdeo.h:203

Referenced by IntVideoPortDispatchDeviceControl().

◆ VideoPortForwardDeviceControl()

static NTSTATUS VideoPortForwardDeviceControl ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)
static

Definition at line 656 of file dispatch.c.

659{
660 PIO_STACK_LOCATION IrpStack;
662 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
664
665 TRACE_(VIDEOPRT, "VideoPortForwardDeviceControl\n");
666
668 DeviceExtension = DeviceObject->DeviceExtension;
669 DriverExtension = DeviceExtension->DriverExtension;
670
671 /* Translate the IRP to a VRP */
672 vrp.StatusBlock = (PSTATUS_BLOCK)&Irp->IoStatus;
673 vrp.IoControlCode = IrpStack->Parameters.DeviceIoControl.IoControlCode;
674
675 INFO_(VIDEOPRT, "- IoControlCode: %x\n", vrp.IoControlCode);
676
677 /* We're assuming METHOD_BUFFERED */
678 vrp.InputBuffer = Irp->AssociatedIrp.SystemBuffer;
679 vrp.InputBufferLength = IrpStack->Parameters.DeviceIoControl.InputBufferLength;
680 vrp.OutputBuffer = Irp->AssociatedIrp.SystemBuffer;
681 vrp.OutputBufferLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;
682
683 /* Call the Miniport Driver with the VRP */
684 DriverExtension->InitializationData.HwStartIO(&DeviceExtension->MiniPortDeviceExtension,
685 &vrp);
686
687 INFO_(VIDEOPRT, "- Returned status: %x\n", Irp->IoStatus.Status);
688
689 /* Map from win32 error codes to NT status values. */
690 switch (Irp->IoStatus.Status)
691 {
692 case NO_ERROR:
693 return STATUS_SUCCESS;
696 case ERROR_MORE_DATA:
706 case ERROR_IO_PENDING:
707 return STATUS_PENDING;
708 default:
709 return STATUS_UNSUCCESSFUL;
710 }
711}
#define ERROR_DEV_NOT_EXIST
Definition: dderror.h:8
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define NO_ERROR
Definition: dderror.h:5
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define ERROR_IO_PENDING
Definition: dderror.h:15
#define ERROR_INVALID_FUNCTION
Definition: dderror.h:6
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define STATUS_DEVICE_DOES_NOT_EXIST
Definition: ntstatus.h:428
struct _STATUS_BLOCK * PSTATUS_BLOCK
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
ULONG InputBufferLength
Definition: video.h:333
PSTATUS_BLOCK StatusBlock
Definition: video.h:331
ULONG OutputBufferLength
Definition: video.h:335
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135

Referenced by IntVideoPortDispatchDeviceControl().

◆ VideoPortInitWin32kCallbacks()

static NTSTATUS VideoPortInitWin32kCallbacks ( _In_ PDEVICE_OBJECT  DeviceObject,
_Inout_ PVIDEO_WIN32K_CALLBACKS  Win32kCallbacks,
_In_ ULONG  BufferLength,
_Out_ PULONG_PTR  Information 
)
static

Definition at line 627 of file dispatch.c.

632{
633 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
634
637 {
638 ERR_(VIDEOPRT, "Buffer too small for VIDEO_WIN32K_CALLBACKS: %lx\n",
641 }
642
643 /* Save the callout function globally */
644 Win32kCallout = Win32kCallbacks->Callout;
645
646 /* Return reasonable values to Win32k */
647 Win32kCallbacks->bACPI = FALSE;
648 Win32kCallbacks->pPhysDeviceObject = DeviceExtension->PhysicalDeviceObject;
649 Win32kCallbacks->DualviewFlags = 0;
650
651 return STATUS_SUCCESS;
652}
struct _VIDEO_WIN32K_CALLBACKS VIDEO_WIN32K_CALLBACKS
PDEVICE_OBJECT PhysicalDeviceObject
Definition: videoprt.h:87
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
Definition: wdfdevice.h:3771
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
Definition: wdfrequest.h:1049
static PVIDEO_WIN32K_CALLOUT Win32kCallout
Definition: dispatch.c:33

Referenced by IntVideoPortDispatchDeviceControl().

◆ VideoPortUseDeviceInSession()

static NTSTATUS VideoPortUseDeviceInSession ( _Inout_ PDEVICE_OBJECT  DeviceObject,
_Inout_ PVIDEO_DEVICE_SESSION_STATUS  SessionState,
_In_ ULONG  BufferLength,
_Out_ PULONG_PTR  Information 
)
static

Definition at line 569 of file dispatch.c.

574{
575 PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
576
577 /* Check buffer size */
580 {
581 ERR_(VIDEOPRT, "Buffer too small for VIDEO_DEVICE_SESSION_STATUS: %lx\n",
584 }
585
586 /* Get the device extension */
587 DeviceExtension = DeviceObject->DeviceExtension;
588
589 /* Shall we enable the session? */
590 if (SessionState->bEnable)
591 {
592 /* Check if we have no session yet */
593 if (DeviceExtension->SessionId == -1)
594 {
595 /* Use this session and return success */
596 DeviceExtension->SessionId = PsGetCurrentProcessSessionId();
597 SessionState->bSuccess = TRUE;
598 }
599 else
600 {
601 ERR_(VIDEOPRT, "Requested to set session, but session is already set to: 0x%lx\n",
602 DeviceExtension->SessionId);
603 SessionState->bSuccess = FALSE;
604 }
605 }
606 else
607 {
608 /* Check if we belong to the current session */
609 if (DeviceExtension->SessionId == PsGetCurrentProcessSessionId())
610 {
611 /* Reset the session and return success */
612 DeviceExtension->SessionId = -1;
613 SessionState->bSuccess = TRUE;
614 }
615 else
616 {
617 ERR_(VIDEOPRT, "Requested to reset session, but session is not set\n");
618 SessionState->bSuccess = FALSE;
619 }
620 }
621
622 return STATUS_SUCCESS;
623}
struct _VIDEO_DEVICE_SESSION_STATUS VIDEO_DEVICE_SESSION_STATUS
ULONG NTAPI PsGetCurrentProcessSessionId(VOID)
Definition: process.c:1133

Referenced by IntVideoPortDispatchDeviceControl().

◆ VideoPortWin32kCallout()

static VOID VideoPortWin32kCallout ( _In_ PVIDEO_WIN32K_CALLBACKS_PARAMS  CallbackParams)
static

Definition at line 40 of file dispatch.c.

42{
43 if (!Win32kCallout)
44 return;
45
46 /* Perform the call in the context of CSRSS */
47 if (!CsrProcess)
48 return;
49
51 Win32kCallout(CallbackParams);
53}
VOID NTAPI KeDetachProcess(VOID)
Definition: procobj.c:621
VOID NTAPI KeAttachProcess(IN PKPROCESS Process)
Definition: procobj.c:582

Referenced by InbvMonitorThread().

Variable Documentation

◆ InbvMonitoring

BOOLEAN InbvMonitoring = FALSE
static

Definition at line 35 of file dispatch.c.

Referenced by InbvMonitorThread(), and IntVideoPortResetDisplayParametersEx().

◆ InbvThreadHandle

HANDLE InbvThreadHandle = NULL
static

Definition at line 34 of file dispatch.c.

Referenced by IntVideoPortInbvCleanup(), and IntVideoPortInbvInitialize().

◆ Win32kCallout

PVIDEO_WIN32K_CALLOUT Win32kCallout = NULL
static

Definition at line 33 of file dispatch.c.

Referenced by VideoPortInitWin32kCallbacks(), and VideoPortWin32kCallout().