ReactOS  0.4.14-dev-1276-g8aa58c1
videoprt.c File Reference
#include "videoprt.h"
#include <stdio.h>
#include <ndk/exfuncs.h>
#include <ndk/obfuncs.h>
#include <ndk/rtlfuncs.h>
#include <debug.h>
Include dependency graph for videoprt.c:

Go to the source code of this file.

Classes

struct  QueryRegistryCallbackContext
 

Macros

#define NDEBUG
 

Typedefs

typedef struct QueryRegistryCallbackContext QUERY_REGISTRY_CALLBACK_CONTEXT
 
typedef struct QueryRegistryCallbackContextPQUERY_REGISTRY_CALLBACK_CONTEXT
 

Functions

 RTL_STATIC_LIST_HEAD (HwResetAdaptersList)
 
ULONG NTAPI DriverEntry (IN PVOID Context1, IN PVOID Context2)
 
PVOID NTAPI IntVideoPortImageDirectoryEntryToData (PVOID BaseAddress, ULONG Directory)
 
VOID NTAPI IntVideoPortDeferredRoutine (IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
 
NTSTATUS NTAPI IntVideoPortCreateAdapterDeviceObject (IN PDRIVER_OBJECT DriverObject, IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension, IN PDEVICE_OBJECT PhysicalDeviceObject, OUT PDEVICE_OBJECT *DeviceObject OPTIONAL)
 
NTSTATUS NTAPI IntVideoPortFindAdapter (IN PDRIVER_OBJECT DriverObject, IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension, IN PDEVICE_OBJECT DeviceObject)
 
VOID FASTCALL IntAttachToCSRSS (PKPROCESS *CallingProcess, PKAPC_STATE ApcState)
 
VOID FASTCALL IntDetachFromCSRSS (PKPROCESS *CallingProcess, PKAPC_STATE ApcState)
 
VOID FASTCALL IntLoadRegistryParameters (VOID)
 
ULONG NTAPI VideoPortInitialize (IN PVOID Context1, IN PVOID Context2, IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData, IN PVOID HwContext)
 
VOID VideoPortDebugPrint (IN VIDEO_DEBUG_LEVEL DebugPrintLevel, IN PCHAR DebugMessage,...)
 
VOID NTAPI VideoPortLogError (IN PVOID HwDeviceExtension, IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL, IN VP_STATUS ErrorCode, IN ULONG UniqueId)
 
UCHAR NTAPI VideoPortGetCurrentIrql (VOID)
 
static NTSTATUS NTAPI QueryRegistryCallback (IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
 
VP_STATUS NTAPI VideoPortGetRegistryParameters (IN PVOID HwDeviceExtension, IN PWSTR ParameterName, IN UCHAR IsParameterFileName, IN PMINIPORT_GET_REGISTRY_ROUTINE GetRegistryRoutine, IN PVOID HwContext)
 
VP_STATUS NTAPI VideoPortSetRegistryParameters (IN PVOID HwDeviceExtension, IN PWSTR ValueName, IN PVOID ValueData, IN ULONG ValueLength)
 
VP_STATUS NTAPI VideoPortGetVgaStatus (IN PVOID HwDeviceExtension, OUT PULONG VgaStatus)
 
PVOID NTAPI VideoPortGetRomImage (IN PVOID HwDeviceExtension, IN PVOID Unused1, IN ULONG Unused2, IN ULONG Length)
 
BOOLEAN NTAPI VideoPortScanRom (IN PVOID HwDeviceExtension, IN PUCHAR RomBase, IN ULONG RomLength, IN PUCHAR String)
 
BOOLEAN NTAPI VideoPortSynchronizeExecution (IN PVOID HwDeviceExtension, IN VIDEO_SYNCHRONIZE_PRIORITY Priority, IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine, OUT PVOID Context)
 
VP_STATUS NTAPI VideoPortEnumerateChildren (IN PVOID HwDeviceExtension, IN PVOID Reserved)
 
VP_STATUS NTAPI VideoPortCreateSecondaryDisplay (IN PVOID HwDeviceExtension, IN OUT PVOID *SecondaryDeviceExtension, IN ULONG Flag)
 
BOOLEAN NTAPI VideoPortQueueDpc (IN PVOID HwDeviceExtension, IN PMINIPORT_DPC_ROUTINE CallbackRoutine, IN PVOID Context)
 
PVOID NTAPI VideoPortGetAssociatedDeviceExtension (IN PVOID DeviceObject)
 
VP_STATUS NTAPI VideoPortGetVersion (IN PVOID HwDeviceExtension, IN OUT PVPOSVERSIONINFO VpOsVersionInfo)
 
BOOLEAN NTAPI VideoPortCheckForDeviceExistence (IN PVOID HwDeviceExtension, IN USHORT VendorId, IN USHORT DeviceId, IN UCHAR RevisionId, IN USHORT SubVendorId, IN USHORT SubSystemId, IN ULONG Flags)
 
VP_STATUS NTAPI VideoPortRegisterBugcheckCallback (IN PVOID HwDeviceExtension, IN ULONG BugcheckCode, IN PVIDEO_BUGCHECK_CALLBACK Callback, IN ULONG BugcheckDataSize)
 
LONGLONG NTAPI VideoPortQueryPerformanceCounter (IN PVOID HwDeviceExtension, OUT PLONGLONG PerformanceFrequency OPTIONAL)
 
VOID NTAPI VideoPortAcquireDeviceLock (IN PVOID HwDeviceExtension)
 
VOID NTAPI VideoPortReleaseDeviceLock (IN PVOID HwDeviceExtension)
 
VOID NTAPI VpNotifyEaData (IN PDEVICE_OBJECT DeviceObject, IN PVOID Data)
 
PVOID NTAPI VideoPortAllocateContiguousMemory (IN PVOID HwDeviceExtension, IN ULONG NumberOfBytes, IN PHYSICAL_ADDRESS HighestAcceptableAddress)
 
BOOLEAN NTAPI VideoPortIsNoVesa (VOID)
 

Variables

BOOLEAN VpBaseVideo = FALSE
 
BOOLEAN VpNoVesa = FALSE
 
PKPROCESS CsrProcess = NULL
 
ULONG VideoPortDeviceNumber = 0
 
KMUTEX VideoPortInt10Mutex
 
KSPIN_LOCK HwResetAdaptersLock
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 29 of file videoprt.c.

Typedef Documentation

◆ PQUERY_REGISTRY_CALLBACK_CONTEXT

◆ QUERY_REGISTRY_CALLBACK_CONTEXT

Function Documentation

◆ DriverEntry()

ULONG NTAPI DriverEntry ( IN PVOID  Context1,
IN PVOID  Context2 
)

Definition at line 47 of file videoprt.c.

50 {
51  return STATUS_SUCCESS;
52 }
return STATUS_SUCCESS
Definition: btrfs.c:2938

◆ IntAttachToCSRSS()

VOID FASTCALL IntAttachToCSRSS ( PKPROCESS CallingProcess,
PKAPC_STATE  ApcState 
)

Definition at line 439 of file videoprt.c.

442 {
443  *CallingProcess = (PKPROCESS)PsGetCurrentProcess();
444  if (*CallingProcess != CsrProcess)
445  {
447  }
448 }
PKPROCESS CsrProcess
Definition: videoprt.c:37
VOID NTAPI KeStackAttachProcess(IN PKPROCESS Process, OUT PRKAPC_STATE ApcState)
Definition: procobj.c:701
#define PsGetCurrentProcess
Definition: psfuncs.h:17
struct _KPROCESS * PKPROCESS
Definition: wdm.template.h:199
_Out_ PKAPC_STATE ApcState
Definition: mm.h:1492

Referenced by IntInt10AllocateBuffer(), IntInt10CallBios(), IntInt10FreeBuffer(), IntInt10ReadMemory(), IntInt10WriteMemory(), and VideoPortGetRomImage().

◆ IntDetachFromCSRSS()

VOID FASTCALL IntDetachFromCSRSS ( PKPROCESS CallingProcess,
PKAPC_STATE  ApcState 
)

Definition at line 452 of file videoprt.c.

455 {
456  if (*CallingProcess != CsrProcess)
457  {
459  }
460 }
PKPROCESS CsrProcess
Definition: videoprt.c:37
VOID NTAPI KeUnstackDetachProcess(IN PRKAPC_STATE ApcState)
Definition: procobj.c:753
_Out_ PKAPC_STATE ApcState
Definition: mm.h:1492

Referenced by IntInt10AllocateBuffer(), IntInt10CallBios(), IntInt10FreeBuffer(), IntInt10ReadMemory(), IntInt10WriteMemory(), and VideoPortGetRomImage().

◆ IntLoadRegistryParameters()

VOID FASTCALL IntLoadRegistryParameters ( VOID  )

Definition at line 464 of file videoprt.c.

465 {
468  UNICODE_STRING Path = RTL_CONSTANT_STRING(L"\\REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\Control");
469  UNICODE_STRING ValueName = RTL_CONSTANT_STRING(L"SystemStartOptions");
473 
474  /* Initialize object attributes with the path we want */
476  &Path,
478  NULL,
479  NULL);
480 
481  /* Open the key */
482  Status = ZwOpenKey(&KeyHandle,
485  if (!NT_SUCCESS(Status))
486  {
487  VideoPortDebugPrint(Error, "ZwOpenKey failed (0x%x)\n", Status);
488  return;
489  }
490 
491  /* Find out how large our buffer should be */
492  Status = ZwQueryValueKey(KeyHandle,
493  &ValueName,
495  NULL,
496  0,
497  &Length);
499  {
500  VideoPortDebugPrint(Error, "ZwQueryValueKey failed (0x%x)\n", Status);
502  return;
503  }
504 
505  /* Allocate it */
507  if (!KeyInfo)
508  {
509  VideoPortDebugPrint(Error, "Out of memory\n");
511  return;
512  }
513 
514  /* Now for real this time */
515  Status = ZwQueryValueKey(KeyHandle,
516  &ValueName,
518  KeyInfo,
519  Length,
520  &NewLength);
522 
523  if (!NT_SUCCESS(Status))
524  {
525  VideoPortDebugPrint(Error, "ZwQueryValueKey failed (0x%x)\n", Status);
527  return;
528  }
529 
530  /* Sanity check */
531  if (KeyInfo->Type != REG_SZ)
532  {
533  VideoPortDebugPrint(Error, "Invalid type for SystemStartOptions\n");
535  return;
536  }
537 
538  /* Check if BASEVIDEO or NOVESA is present in the start options */
539  if (wcsstr((PWCHAR)KeyInfo->Data, L"BASEVIDEO"))
540  VpBaseVideo = TRUE;
541  if (wcsstr((PWCHAR)KeyInfo->Data, L"NOVESA"))
542  VpNoVesa = TRUE;
543 
545 
546  /* FIXME: Old ReactOS-compatibility... */
547  if (VpBaseVideo) VpNoVesa = TRUE;
548 
549  if (VpNoVesa)
550  VideoPortDebugPrint(Info, "VESA mode disabled\n");
551  else
552  VideoPortDebugPrint(Info, "VESA mode enabled\n");
553 
554  /* If we are in BASEVIDEO, create the volatile registry key for Win32k */
555  if (VpBaseVideo)
556  {
557  RtlInitUnicodeString(&Path, L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\GraphicsDrivers\\BaseVideo");
558 
560  &Path,
562  NULL,
563  NULL);
564 
565  Status = ZwCreateKey(&KeyHandle,
566  KEY_WRITE,
568  0,
569  NULL,
571  NULL);
572  if (NT_SUCCESS(Status))
574  else
575  ERR_(VIDEOPRT, "Failed to create the BaseVideo key (0x%x)\n", Status);
576  }
577 
578  return;
579 }
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define TAG_VIDEO_PORT
Definition: videoprt.h:38
#define TRUE
Definition: types.h:120
BOOLEAN VpBaseVideo
Definition: videoprt.c:34
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
Definition: ndis.h:4711
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
#define ERR_(ch,...)
Definition: debug.h:156
LONG NTSTATUS
Definition: precomp.h:26
uint16_t * PWCHAR
Definition: typedefs.h:55
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
struct TraceInfo Info
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
static USHORT USHORT * NewLength
_In_ PUNICODE_STRING ValueName
Definition: cmfuncs.h:264
smooth NULL
Definition: ftsmooth.c:416
#define KEY_WRITE
Definition: nt_native.h:1031
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
BOOL Error
Definition: chkdsk.c:66
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
BOOLEAN VpNoVesa
Definition: videoprt.c:35
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
Definition: obhandle.c:3376
static const WCHAR L[]
Definition: oid.c:1250
Status
Definition: gdiplustypes.h:24
VOID VideoPortDebugPrint(IN VIDEO_DEBUG_LEVEL DebugPrintLevel, IN PCHAR DebugMessage,...)
Definition: videoprt.c:790
PRTL_UNICODE_STRING_BUFFER Path
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
unsigned int ULONG
Definition: retypes.h:1
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
#define REG_OPTION_VOLATILE
Definition: nt_native.h:1060
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
#define REG_SZ
Definition: layer.c:22

Referenced by VideoPortInitialize().

◆ IntVideoPortCreateAdapterDeviceObject()

NTSTATUS NTAPI IntVideoPortCreateAdapterDeviceObject ( IN PDRIVER_OBJECT  DriverObject,
IN PVIDEO_PORT_DRIVER_EXTENSION  DriverExtension,
IN PDEVICE_OBJECT PhysicalDeviceObject  ,
OUT PDEVICE_OBJECT *DeviceObject  OPTIONAL 
)

Definition at line 92 of file videoprt.c.

97 {
98  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
100  ULONG PciSlotNumber;
102  ULONG Size;
104  WCHAR DeviceBuffer[20];
106  PDEVICE_OBJECT DeviceObject_;
107 
108  if (DeviceObject == NULL)
109  DeviceObject = &DeviceObject_;
110 
111  /*
112  * Find the first free device number that can be used for video device
113  * object names and symlinks.
114  */
116  if (DeviceNumber == 0xFFFFFFFF)
117  {
118  WARN_(VIDEOPRT, "Can't find free device number\n");
119  return STATUS_UNSUCCESSFUL;
120  }
121 
122  /*
123  * Create the device object.
124  */
125 
126  /* Create a unicode device name. */
127  swprintf(DeviceBuffer, L"\\Device\\Video%lu", DeviceNumber);
128  RtlInitUnicodeString(&DeviceName, DeviceBuffer);
129 
130  INFO_(VIDEOPRT, "HwDeviceExtension size is: 0x%x\n",
131  DriverExtension->InitializationData.HwDeviceExtensionSize);
132 
133  /* Create the device object. */
135  DriverExtension->InitializationData.HwDeviceExtensionSize;
137  Size,
138  &DeviceName,
140  0,
141  TRUE,
142  DeviceObject);
143 
144  if (!NT_SUCCESS(Status))
145  {
146  WARN_(VIDEOPRT, "IoCreateDevice call failed with status 0x%08x\n", Status);
147  return Status;
148  }
149 
150  /*
151  * Set the buffering strategy here. If you change this, remember
152  * to change VidDispatchDeviceControl too.
153  */
154 
155  (*DeviceObject)->Flags |= DO_BUFFERED_IO;
156 
157  /* Initialize device extension. */
158  DeviceExtension = (PVIDEO_PORT_DEVICE_EXTENSION)((*DeviceObject)->DeviceExtension);
159  DeviceExtension->Common.Fdo = TRUE;
160  DeviceExtension->DeviceNumber = DeviceNumber;
161  DeviceExtension->DriverObject = DriverObject;
162  DeviceExtension->PhysicalDeviceObject = PhysicalDeviceObject;
163  DeviceExtension->FunctionalDeviceObject = *DeviceObject;
164  DeviceExtension->DriverExtension = DriverExtension;
165  DeviceExtension->SessionId = -1;
166 
167  InitializeListHead(&DeviceExtension->ChildDeviceList);
168 
169  /* Get the registry path associated with this device. */
171  &DeviceExtension->RegistryPath);
172  if (!NT_SUCCESS(Status))
173  {
174  WARN_(VIDEOPRT, "IntCreateRegistryPath() call failed with status 0x%08x\n", Status);
176  *DeviceObject = NULL;
177  return Status;
178  }
179 
180  if (PhysicalDeviceObject != NULL)
181  {
182  /* Get bus number from the upper level bus driver. */
183  Size = sizeof(ULONG);
186  Size,
187  &DeviceExtension->SystemIoBusNumber,
188  &Size);
189  if (!NT_SUCCESS(Status))
190  {
191  WARN_(VIDEOPRT, "Couldn't get an information from bus driver. We will try to\n"
192  "use legacy detection method, but even that doesn't mean that\n"
193  "it will work.\n");
194  DeviceExtension->PhysicalDeviceObject = NULL;
195  }
196  }
197 
198  DeviceExtension->AdapterInterfaceType =
199  DriverExtension->InitializationData.AdapterInterfaceType;
200 
201  if (PhysicalDeviceObject != NULL)
202  {
203  /* Get bus type from the upper level bus driver. */
204  Size = sizeof(ULONG);
207  Size,
208  &DeviceExtension->AdapterInterfaceType,
209  &Size);
210 
211  /* Get bus device address from the upper level bus driver. */
212  Size = sizeof(ULONG);
215  Size,
216  &PciSlotNumber,
217  &Size);
218 
219  /* Convert slotnumber to PCI_SLOT_NUMBER */
220  SlotNumber.u.AsULONG = 0;
221  SlotNumber.u.bits.DeviceNumber = (PciSlotNumber >> 16) & 0xFFFF;
222  SlotNumber.u.bits.FunctionNumber = PciSlotNumber & 0xFFFF;
223  DeviceExtension->SystemIoSlotNumber = SlotNumber.u.AsULONG;
224  }
225 
226  InitializeListHead(&DeviceExtension->AddressMappingListHead);
227  InitializeListHead(&DeviceExtension->DmaAdapterList);
228 
229  KeInitializeDpc(&DeviceExtension->DpcObject,
231  DeviceExtension);
232 
233  KeInitializeMutex(&DeviceExtension->DeviceLock, 0);
234 
235  /* Attach the device. */
236  if (PhysicalDeviceObject != NULL)
238  *DeviceObject,
240 
241  IntCreateNewRegistryPath(DeviceExtension);
242  IntSetupDeviceSettingsKey(DeviceExtension);
243 
244  /* Remove the initailizing flag */
245  (*DeviceObject)->Flags &= ~DO_DEVICE_INITIALIZING;
246  return STATUS_SUCCESS;
247 }
#define DO_DEVICE_INITIALIZING
Definition: env_spec_w32.h:399
#define TRUE
Definition: types.h:120
PDEVICE_OBJECT FunctionalDeviceObject
Definition: videoprt.h:88
NTSTATUS NTAPI IntCreateNewRegistryPath(PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension)
Definition: registry.c:357
VOID NTAPI IntVideoPortDeferredRoutine(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
Definition: videoprt.c:79
#define INFO_(ch,...)
Definition: debug.h:159
VIDEO_PORT_DRIVER_EXTENSION * DriverExtension
Definition: videoprt.h:103
LONG NTSTATUS
Definition: precomp.h:26
struct _VIDEO_PORT_DEVICE_EXTENSTION * PVIDEO_PORT_DEVICE_EXTENSION
LIST_ENTRY AddressMappingListHead
Definition: videoprt.h:101
NTSTATUS NTAPI IntSetupDeviceSettingsKey(PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension)
Definition: registry.c:296
PDEVICE_OBJECT PhysicalDeviceObject
Definition: btrfs_drv.h:1122
WCHAR DeviceName[]
Definition: adapter.cpp:21
PDEVICE_OBJECT PhysicalDeviceObject
Definition: videoprt.h:87
PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice)
Definition: device.c:966
smooth NULL
Definition: ftsmooth.c:416
static PDRIVER_OBJECT DriverObject
Definition: template.c:42
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
Definition: pnpmgr.c:4300
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define FILE_DEVICE_VIDEO
Definition: winioctl.h:140
#define DO_BUFFERED_IO
Definition: env_spec_w32.h:394
NTSTATUS NTAPI IntCreateRegistryPath(IN PCUNICODE_STRING DriverRegistryPath, OUT PUNICODE_STRING DeviceRegistryPath)
Definition: registry.c:532
#define swprintf(buf, format,...)
Definition: sprintf.c:56
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG _In_ ULONG SlotNumber
Definition: halfuncs.h:156
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
Definition: mutex.c:67
static const WCHAR L[]
Definition: oid.c:1250
PDEVICE_OBJECT NextDeviceObject
Definition: videoprt.h:89
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:359
PPCI_DRIVER_EXTENSION DriverExtension
Definition: pci.c:41
Status
Definition: gdiplustypes.h:24
PDRIVER_OBJECT DriverObject
Definition: videoprt.h:86
struct _VIDEO_PORT_DEVICE_EXTENSTION VIDEO_PORT_DEVICE_EXTENSION
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1251
ULONG VideoPortDeviceNumber
Definition: videoprt.c:38
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
VIDEO_PORT_COMMON_EXTENSION Common
Definition: videoprt.h:84
unsigned int ULONG
Definition: retypes.h:1
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1031
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
UNICODE_STRING RegistryPath
Definition: videoprt.h:90
_In_ PCHAR _In_ ULONG DeviceNumber
Definition: classpnp.h:1036
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
Definition: dpc.c:711
INTERFACE_TYPE AdapterInterfaceType
Definition: videoprt.h:98
return STATUS_SUCCESS
Definition: btrfs.c:2938
#define WARN_(ch,...)
Definition: debug.h:157

Referenced by IntVideoPortAddDevice(), and VideoPortInitialize().

◆ IntVideoPortDeferredRoutine()

VOID NTAPI IntVideoPortDeferredRoutine ( IN PKDPC  Dpc,
IN PVOID  DeferredContext,
IN PVOID  SystemArgument1,
IN PVOID  SystemArgument2 
)

Definition at line 79 of file videoprt.c.

84 {
85  PVOID HwDeviceExtension =
86  &((PVIDEO_PORT_DEVICE_EXTENSION)DeferredContext)->MiniPortDeviceExtension;
88 }
struct _VIDEO_PORT_DEVICE_EXTENSTION * PVIDEO_PORT_DEVICE_EXTENSION
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
Definition: ketypes.h:675
VOID(NTAPI * PMINIPORT_DPC_ROUTINE)(IN PVOID HwDeviceExtension, IN PVOID Context)
Definition: video.h:518
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
Definition: ketypes.h:675
_In_opt_ PVOID DeferredContext
Definition: ketypes.h:675

Referenced by IntVideoPortCreateAdapterDeviceObject().

◆ IntVideoPortFindAdapter()

NTSTATUS NTAPI IntVideoPortFindAdapter ( IN PDRIVER_OBJECT  DriverObject,
IN PVIDEO_PORT_DRIVER_EXTENSION  DriverExtension,
IN PDEVICE_OBJECT  DeviceObject 
)

Definition at line 252 of file videoprt.c.

256 {
257  WCHAR DeviceVideoBuffer[20];
258  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
260  VIDEO_PORT_CONFIG_INFO ConfigInfo;
262  UCHAR Again = FALSE;
263  WCHAR DeviceBuffer[20];
265  WCHAR SymlinkBuffer[20];
266  UNICODE_STRING SymlinkName;
267  BOOL LegacyDetection = FALSE;
269 
271  DeviceNumber = DeviceExtension->DeviceNumber;
272 
273  /* Setup a ConfigInfo structure that we will pass to HwFindAdapter. */
274  RtlZeroMemory(&ConfigInfo, sizeof(VIDEO_PORT_CONFIG_INFO));
275  ConfigInfo.Length = sizeof(VIDEO_PORT_CONFIG_INFO);
276  ConfigInfo.AdapterInterfaceType = DeviceExtension->AdapterInterfaceType;
277  if (ConfigInfo.AdapterInterfaceType == PCIBus)
278  ConfigInfo.InterruptMode = LevelSensitive;
279  else
280  ConfigInfo.InterruptMode = Latched;
281  ConfigInfo.DriverRegistryPath = DriverExtension->RegistryPath.Buffer;
283  ConfigInfo.SystemIoBusNumber = DeviceExtension->SystemIoBusNumber;
284  ConfigInfo.BusInterruptLevel = DeviceExtension->InterruptLevel;
285  ConfigInfo.BusInterruptVector = DeviceExtension->InterruptVector;
286 
289  sizeof(SystemBasicInfo),
290  NULL);
291  if (NT_SUCCESS(Status))
292  {
295  }
296 
297  /*
298  * Call miniport HwVidFindAdapter entry point to detect if
299  * particular device is present. There are two possible code
300  * paths. The first one is for Legacy drivers (NT4) and cases
301  * when we don't have information about what bus we're on. The
302  * second case is the standard one for Plug & Play drivers.
303  */
304  if (DeviceExtension->PhysicalDeviceObject == NULL)
305  {
306  LegacyDetection = TRUE;
307  }
308 
309  if (LegacyDetection)
310  {
311  ULONG BusNumber, MaxBuses;
312 
313  MaxBuses = DeviceExtension->AdapterInterfaceType == PCIBus ? PCI_MAX_BRIDGE_NUMBER : 1;
314 
315  for (BusNumber = 0; BusNumber < MaxBuses; BusNumber++)
316  {
317  DeviceExtension->SystemIoBusNumber =
318  ConfigInfo.SystemIoBusNumber = BusNumber;
319 
320  RtlZeroMemory(&DeviceExtension->MiniPortDeviceExtension,
321  DriverExtension->InitializationData.HwDeviceExtensionSize);
322 
323  /* FIXME: Need to figure out what string to pass as param 3. */
324  Status = DriverExtension->InitializationData.HwFindAdapter(
325  &DeviceExtension->MiniPortDeviceExtension,
326  DriverExtension->HwContext,
327  NULL,
328  &ConfigInfo,
329  &Again);
330 
332  {
333  continue;
334  }
335  else if (Status == NO_ERROR)
336  {
337  break;
338  }
339  else
340  {
341  ERR_(VIDEOPRT, "HwFindAdapter call failed with error 0x%X\n", Status);
342  goto Failure;
343  }
344  }
345  }
346  else
347  {
348  /* FIXME: Need to figure out what string to pass as param 3. */
349  Status = DriverExtension->InitializationData.HwFindAdapter(
350  &DeviceExtension->MiniPortDeviceExtension,
351  DriverExtension->HwContext,
352  NULL,
353  &ConfigInfo,
354  &Again);
355  }
356 
357  if (Status != NO_ERROR)
358  {
359  ERR_(VIDEOPRT, "HwFindAdapter call failed with error 0x%X\n", Status);
360  goto Failure;
361  }
362 
363  /*
364  * Now we know the device is present, so let's do all additional tasks
365  * such as creating symlinks or setting up interrupts and timer.
366  */
367 
368  /* Create a unicode device name. */
369  swprintf(DeviceBuffer, L"\\Device\\Video%lu", DeviceNumber);
370  RtlInitUnicodeString(&DeviceName, DeviceBuffer);
371 
372  /* Create symbolic link "\??\DISPLAYx" */
373  swprintf(SymlinkBuffer, L"\\??\\DISPLAY%lu", DeviceNumber + 1);
374  RtlInitUnicodeString(&SymlinkName, SymlinkBuffer);
375  IoCreateSymbolicLink(&SymlinkName, &DeviceName);
376 
377  /* Add entry to DEVICEMAP\VIDEO key in registry. */
378  swprintf(DeviceVideoBuffer, L"\\Device\\Video%d", DeviceNumber);
381  L"VIDEO",
382  DeviceVideoBuffer,
383  REG_SZ,
384  DeviceExtension->RegistryPath.Buffer,
385  DeviceExtension->RegistryPath.Length + sizeof(UNICODE_NULL));
386 
389  L"VIDEO",
390  L"MaxObjectNumber",
391  REG_DWORD,
392  &DeviceNumber,
393  sizeof(DeviceNumber));
394 
395  /* FIXME: Allocate hardware resources for device. */
396 
397  /* Allocate interrupt for device. */
399  {
401  goto Failure;
402  }
403 
404  /* Allocate timer for device. */
406  {
407  if (DeviceExtension->InterruptObject != NULL)
408  IoDisconnectInterrupt(DeviceExtension->InterruptObject);
409  ERR_(VIDEOPRT, "IntVideoPortSetupTimer failed\n");
411  goto Failure;
412  }
413 
414  /* If the device can be reset, insert it in the list of resettable adapters */
415  InitializeListHead(&DeviceExtension->HwResetListEntry);
416  if (DriverExtension->InitializationData.HwResetHw != NULL)
417  {
419  &DeviceExtension->HwResetListEntry,
421  }
422 
423  /* Query children of the device. */
425 
426  INFO_(VIDEOPRT, "STATUS_SUCCESS\n");
427  return STATUS_SUCCESS;
428 
429 Failure:
430  RtlFreeUnicodeString(&DeviceExtension->RegistryPath);
431  if (DeviceExtension->NextDeviceObject)
432  IoDetachDevice(DeviceExtension->NextDeviceObject);
434  return Status;
435 }
#define TRUE
Definition: types.h:120
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define PCI_MAX_BRIDGE_NUMBER
Definition: iotypes.h:3244
#define INFO_(ch,...)
Definition: debug.h:159
BOOLEAN NTAPI IntVideoPortSetupTimer(IN PDEVICE_OBJECT DeviceObject, IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension)
Definition: timer.c:43
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
Definition: interlocked.c:140
#define ERR_(ch,...)
Definition: debug.h:156
LONG NTSTATUS
Definition: precomp.h:26
struct _VIDEO_PORT_DEVICE_EXTENSTION * PVIDEO_PORT_DEVICE_EXTENSION
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
Definition: device.c:1296
WCHAR DeviceName[]
Definition: adapter.cpp:21
#define NO_ERROR
Definition: dderror.h:5
INTERFACE_TYPE AdapterInterfaceType
Definition: video.h:169
PVOID NTAPI IntVideoPortGetProcAddress(IN PVOID HwDeviceExtension, IN PUCHAR FunctionName)
Definition: funclist.c:100
#define UNICODE_NULL
NTSYSAPI NTSTATUS WINAPI RtlWriteRegistryValue(ULONG, PCWSTR, PCWSTR, ULONG, PVOID, ULONG)
unsigned int BOOL
Definition: ntddk_ex.h:94
PDEVICE_OBJECT PhysicalDeviceObject
Definition: videoprt.h:87
VP_STATUS NTAPI VideoPortEnumerateChildren(IN PVOID HwDeviceExtension, IN PVOID Reserved)
Definition: videoprt.c:1119
NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation(IN SYSTEM_INFORMATION_CLASS SystemInfoClass, OUT PVOID SystemInfoBuffer, IN ULONG SystemInfoBufferSize, OUT PULONG BytesReturned OPTIONAL)
PVOID DeviceExtension
Definition: env_spec_w32.h:418
smooth NULL
Definition: ftsmooth.c:416
PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress
Definition: video.h:193
VOID NTAPI IoDisconnectInterrupt(PKINTERRUPT InterruptObject)
Definition: irq.c:140
KSPIN_LOCK HwResetAdaptersLock
Definition: videoprt.c:40
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
Definition: halfuncs.h:156
ULONGLONG SystemMemorySize
Definition: video.h:195
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
SYSTEM_BASIC_INFORMATION SystemBasicInfo
Definition: perfdata.c:45
#define swprintf(buf, format,...)
Definition: sprintf.c:56
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
struct _VIDEO_PORT_CONFIG_INFO VIDEO_PORT_CONFIG_INFO
unsigned char UCHAR
Definition: xmlstorage.h:181
static const WCHAR L[]
Definition: oid.c:1250
PWSTR DriverRegistryPath
Definition: video.h:194
PDEVICE_OBJECT NextDeviceObject
Definition: videoprt.h:89
PPCI_DRIVER_EXTENSION DriverExtension
Definition: pci.c:41
Status
Definition: gdiplustypes.h:24
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1251
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
BOOLEAN NTAPI IntVideoPortSetupInterrupt(IN PDEVICE_OBJECT DeviceObject, IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension, IN PVIDEO_PORT_CONFIG_INFO ConfigInfo)
Definition: interrupt.c:45
unsigned int ULONG
Definition: retypes.h:1
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
LIST_ENTRY HwResetAdaptersList
UNICODE_STRING RegistryPath
Definition: videoprt.h:90
_In_ PCHAR _In_ ULONG DeviceNumber
Definition: classpnp.h:1036
#define RTL_REGISTRY_DEVICEMAP
Definition: nt_native.h:165
INTERFACE_TYPE AdapterInterfaceType
Definition: videoprt.h:98
return STATUS_SUCCESS
Definition: btrfs.c:2938
#define REG_DWORD
Definition: sdbapi.c:596
#define ERROR_DEV_NOT_EXIST
Definition: dderror.h:8
ULONG BusInterruptVector
Definition: video.h:171
KINTERRUPT_MODE InterruptMode
Definition: video.h:172
#define REG_SZ
Definition: layer.c:22

Referenced by IntVideoPortPnPStartDevice(), and VideoPortInitialize().

◆ IntVideoPortImageDirectoryEntryToData()

PVOID NTAPI IntVideoPortImageDirectoryEntryToData ( PVOID  BaseAddress,
ULONG  Directory 
)

Definition at line 56 of file videoprt.c.

59 {
60  PIMAGE_NT_HEADERS NtHeader;
61  ULONG Va;
62 
63  NtHeader = RtlImageNtHeader(BaseAddress);
64  if (NtHeader == NULL)
65  return NULL;
66 
68  return NULL;
69 
71  if (Va == 0)
72  return NULL;
73 
74  return (PVOID)((ULONG_PTR)BaseAddress + Va);
75 }
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]
Definition: ntddk_ex.h:178
IMAGE_OPTIONAL_HEADER32 OptionalHeader
Definition: ntddk_ex.h:184
smooth NULL
Definition: ftsmooth.c:416
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
Definition: mmfuncs.h:404
#define RtlImageNtHeader
Definition: compat.h:465
unsigned int ULONG
Definition: retypes.h:1
base for all directory entries
Definition: entries.h:138
#define ULONG_PTR
Definition: config.h:101
_In_ BOOLEAN _In_ USHORT Directory
Definition: rtlfuncs.h:3781

◆ QueryRegistryCallback()

static NTSTATUS NTAPI QueryRegistryCallback ( IN PWSTR  ValueName,
IN ULONG  ValueType,
IN PVOID  ValueData,
IN ULONG  ValueLength,
IN PVOID  Context,
IN PVOID  EntryContext 
)
static

Definition at line 841 of file videoprt.c.

848 {
850 
851  INFO_(VIDEOPRT, "Found registry value for name %S: type %d, length %d\n",
853  return (*(CallbackContext->HwGetRegistryRoutine))(
854  CallbackContext->HwDeviceExtension,
855  CallbackContext->HwContext,
856  ValueName,
857  ValueData,
858  ValueLength);
859 }
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR _In_ ULONGLONG _In_ ULONGLONG _In_opt_ PEVENT_FILTER_DESCRIPTOR _Inout_opt_ PVOID CallbackContext
Definition: wmitypes.h:55
#define INFO_(ch,...)
Definition: debug.h:159
_In_ PCWSTR _In_z_ PCWSTR _In_ ULONG ValueType
Definition: rtlfuncs.h:4063
_In_ PUNICODE_STRING ValueName
Definition: cmfuncs.h:264
struct QueryRegistryCallbackContext * PQUERY_REGISTRY_CALLBACK_CONTEXT
_In_ GUID _In_ PVOID ValueData
Definition: hubbusif.h:311
_In_ GUID _In_ PVOID _In_ ULONG ValueLength
Definition: hubbusif.h:311

Referenced by VideoPortGetRegistryParameters().

◆ RTL_STATIC_LIST_HEAD()

RTL_STATIC_LIST_HEAD ( HwResetAdaptersList  )

◆ VideoPortAcquireDeviceLock()

VOID NTAPI VideoPortAcquireDeviceLock ( IN PVOID  HwDeviceExtension)

Definition at line 1470 of file videoprt.c.

1472 {
1473  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
1474  NTSTATUS Status;
1475 
1477 
1478  TRACE_(VIDEOPRT, "VideoPortAcquireDeviceLock\n");
1479  DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
1480  Status = KeWaitForMutexObject(&DeviceExtension->DeviceLock, Executive,
1481  KernelMode, FALSE, NULL);
1482  // ASSERT(Status == STATUS_SUCCESS);
1483 }
#define KeWaitForMutexObject
Definition: kefuncs.h:555
LONG NTSTATUS
Definition: precomp.h:26
#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension)
Definition: videoprt.h:137
#define UNREFERENCED_LOCAL_VARIABLE(L)
Definition: ntbasedef.h:324
smooth NULL
Definition: ftsmooth.c:416
#define TRACE_(x)
Definition: compat.h:66
Status
Definition: gdiplustypes.h:24

◆ VideoPortAllocateContiguousMemory()

PVOID NTAPI VideoPortAllocateContiguousMemory ( IN PVOID  HwDeviceExtension,
IN ULONG  NumberOfBytes,
IN PHYSICAL_ADDRESS  HighestAcceptableAddress 
)

Definition at line 1521 of file videoprt.c.

1526 {
1528 }
_Out_ PNDIS_HANDLE _Out_ PUINT _In_ PNDIS_STRING _In_ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress
Definition: ndis.h:3227
PVOID NTAPI MmAllocateContiguousMemory(IN SIZE_T NumberOfBytes, IN PHYSICAL_ADDRESS HighestAcceptableAddress)
Definition: contmem.c:626
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER NumberOfBytes
Definition: iotypes.h:998

◆ VideoPortCheckForDeviceExistence()

BOOLEAN NTAPI VideoPortCheckForDeviceExistence ( IN PVOID  HwDeviceExtension,
IN USHORT  VendorId,
IN USHORT  DeviceId,
IN UCHAR  RevisionId,
IN USHORT  SubVendorId,
IN USHORT  SubSystemId,
IN ULONG  Flags 
)

Definition at line 1378 of file videoprt.c.

1386 {
1387  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
1390  IO_STACK_LOCATION IoStack;
1391  ULONG PciFlags = 0;
1392  NTSTATUS Status;
1393  BOOL DevicePresent;
1394 
1395  TRACE_(VIDEOPRT, "VideoPortCheckForDeviceExistence\n");
1396 
1398  {
1399  WARN_(VIDEOPRT, "VideoPortCheckForDeviceExistence: Unknown flags 0x%lx\n", Flags & ~(CDE_USE_REVISION | CDE_USE_SUBSYSTEM_IDS));
1400  return FALSE;
1401  }
1402 
1403  DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
1404 
1406  PciDevicePresentInterface.Version = 1;
1408  IoStack.Parameters.QueryInterface.Version = PciDevicePresentInterface.Version;
1410  IoStack.Parameters.QueryInterface.InterfaceType =
1411  &GUID_PCI_DEVICE_PRESENT_INTERFACE;
1412  Status = IopInitiatePnpIrp(DeviceExtension->NextDeviceObject,
1414  if (!NT_SUCCESS(Status))
1415  {
1416  WARN_(VIDEOPRT, "IopInitiatePnpIrp() failed! (Status 0x%lx)\n", Status);
1417  return FALSE;
1418  }
1419 
1420  if (Flags & CDE_USE_REVISION)
1421  PciFlags |= PCI_USE_REVISION;
1423  PciFlags |= PCI_USE_SUBSYSTEM_IDS;
1424 
1425  DevicePresent = PciDevicePresentInterface.IsDevicePresent(
1426  VendorId, DeviceId, RevisionId,
1427  SubVendorId, SubSystemId, PciFlags);
1428 
1429  PciDevicePresentInterface.InterfaceDereference(PciDevicePresentInterface.Context);
1430 
1431  return DevicePresent;
1432 }
LONG NTSTATUS
Definition: precomp.h:26
#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension)
Definition: videoprt.h:137
struct _PCI_DEVICE_PRESENT_INTERFACE PCI_DEVICE_PRESENT_INTERFACE
#define PCI_USE_REVISION
Definition: iotypes.h:835
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
#define CDE_USE_REVISION
Definition: video.h:147
unsigned int BOOL
Definition: ntddk_ex.h:94
struct _INTERFACE * PINTERFACE
#define TRACE_(x)
Definition: compat.h:66
#define CDE_USE_SUBSYSTEM_IDS
Definition: video.h:146
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define IRP_MN_QUERY_INTERFACE
PDEVICE_OBJECT NextDeviceObject
Definition: videoprt.h:89
Status
Definition: gdiplustypes.h:24
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
unsigned int ULONG
Definition: retypes.h:1
PCI_INTERFACE PciDevicePresentInterface
Definition: devhere.c:18
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
Definition: iotypes.h:2772
NTSTATUS NTAPI IopInitiatePnpIrp(IN PDEVICE_OBJECT DeviceObject, IN PIO_STATUS_BLOCK IoStatusBlock, IN UCHAR MinorFunction, IN PIO_STACK_LOCATION Stack)
#define WARN_(ch,...)
Definition: debug.h:157
#define PCI_USE_SUBSYSTEM_IDS
Definition: iotypes.h:834

◆ VideoPortCreateSecondaryDisplay()

VP_STATUS NTAPI VideoPortCreateSecondaryDisplay ( IN PVOID  HwDeviceExtension,
IN OUT PVOID SecondaryDeviceExtension,
IN ULONG  Flag 
)

Definition at line 1293 of file videoprt.c.

1297 {
1298  UNIMPLEMENTED;
1299  return ERROR_DEV_NOT_EXIST;
1300 }
#define UNIMPLEMENTED
Definition: debug.h:114
#define ERROR_DEV_NOT_EXIST
Definition: dderror.h:8

◆ VideoPortDebugPrint()

VOID VideoPortDebugPrint ( IN VIDEO_DEBUG_LEVEL  DebugPrintLevel,
IN PCHAR  DebugMessage,
  ... 
)

Definition at line 790 of file videoprt.c.

794 {
795  va_list ap;
796 
797  va_start(ap, DebugMessage);
798  vDbgPrintEx(DPFLTR_IHVVIDEO_ID, DebugPrintLevel, DebugMessage, ap);
799  va_end(ap);
800 }
#define va_end(ap)
Definition: acmsvcex.h:90
char * va_list
Definition: acmsvcex.h:78
NTSYSAPI ULONG NTAPI vDbgPrintEx(_In_ ULONG ComponentId, _In_ ULONG Level, _In_z_ PCCH Format, _In_ va_list ap)
#define va_start(ap, A)
Definition: acmsvcex.h:91
void int int ULONGLONG int va_list * ap
Definition: winesup.h:32

Referenced by IntLoadRegistryParameters().

◆ VideoPortEnumerateChildren()

VP_STATUS NTAPI VideoPortEnumerateChildren ( IN PVOID  HwDeviceExtension,
IN PVOID  Reserved 
)

Definition at line 1119 of file videoprt.c.

1122 {
1123  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
1124  ULONG Status;
1125  VIDEO_CHILD_ENUM_INFO ChildEnumInfo;
1126  BOOLEAN bHaveLastMonitorID = FALSE;
1127  UCHAR LastMonitorID[10];
1128  ULONG Unused;
1129  UINT i;
1130  PDEVICE_OBJECT ChildDeviceObject;
1131  PVIDEO_PORT_CHILD_EXTENSION ChildExtension;
1132 
1133  INFO_(VIDEOPRT, "Starting child device probe\n");
1134  DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
1136  {
1137  WARN_(VIDEOPRT, "Miniport's HwGetVideoChildDescriptor is NULL!\n");
1138  return NO_ERROR;
1139  }
1140 
1141  if (!IsListEmpty(&DeviceExtension->ChildDeviceList))
1142  {
1143  ERR_(VIDEOPRT, "FIXME: Support calling VideoPortEnumerateChildren again!\n");
1144  return NO_ERROR;
1145  }
1146 
1147  /* Enumerate the children */
1148  for (i = 1; ; i++)
1149  {
1150  Status = IoCreateDevice(DeviceExtension->DriverObject,
1151  sizeof(VIDEO_PORT_CHILD_EXTENSION) +
1153  NULL,
1156  FALSE,
1157  &ChildDeviceObject);
1158  if (!NT_SUCCESS(Status))
1159  return Status;
1160 
1161  ChildExtension = ChildDeviceObject->DeviceExtension;
1162 
1163  RtlZeroMemory(ChildExtension,
1164  sizeof(VIDEO_PORT_CHILD_EXTENSION) +
1166 
1167  ChildExtension->Common.Fdo = FALSE;
1168  ChildExtension->ChildId = i;
1169  ChildExtension->PhysicalDeviceObject = ChildDeviceObject;
1170  ChildExtension->DriverObject = DeviceExtension->DriverObject;
1171 
1172  /* Setup the ChildEnumInfo */
1173  ChildEnumInfo.Size = sizeof(ChildEnumInfo);
1174  ChildEnumInfo.ChildDescriptorSize = sizeof(ChildExtension->ChildDescriptor);
1175  ChildEnumInfo.ACPIHwId = 0;
1176 
1178  ChildEnumInfo.ChildHwDeviceExtension = VIDEO_PORT_GET_CHILD_EXTENSION(ChildExtension);
1179  else
1180  ChildEnumInfo.ChildHwDeviceExtension = NULL;
1181 
1182  ChildEnumInfo.ChildIndex = ChildExtension->ChildId;
1183 
1184  INFO_(VIDEOPRT, "Probing child: %d\n", ChildEnumInfo.ChildIndex);
1186  HwDeviceExtension,
1187  &ChildEnumInfo,
1188  &ChildExtension->ChildType,
1189  ChildExtension->ChildDescriptor,
1190  &ChildExtension->ChildId,
1191  &Unused);
1193  {
1194  if (ChildExtension->ChildType == Monitor)
1195  {
1196  // Check if the EDID is valid
1197  if (ChildExtension->ChildDescriptor[0] == 0x00 &&
1198  ChildExtension->ChildDescriptor[1] == 0xFF &&
1199  ChildExtension->ChildDescriptor[2] == 0xFF &&
1200  ChildExtension->ChildDescriptor[3] == 0xFF &&
1201  ChildExtension->ChildDescriptor[4] == 0xFF &&
1202  ChildExtension->ChildDescriptor[5] == 0xFF &&
1203  ChildExtension->ChildDescriptor[6] == 0xFF &&
1204  ChildExtension->ChildDescriptor[7] == 0x00)
1205  {
1206  if (bHaveLastMonitorID)
1207  {
1208  // Compare the previous monitor ID with the current one, break the loop if they are identical
1209  if (RtlCompareMemory(LastMonitorID, &ChildExtension->ChildDescriptor[8], sizeof(LastMonitorID)) == sizeof(LastMonitorID))
1210  {
1211  INFO_(VIDEOPRT, "Found identical Monitor ID two times, stopping enumeration\n");
1212  IoDeleteDevice(ChildDeviceObject);
1213  break;
1214  }
1215  }
1216 
1217  // Copy 10 bytes from the EDID, which can be used to uniquely identify the monitor
1218  RtlCopyMemory(LastMonitorID, &ChildExtension->ChildDescriptor[8], sizeof(LastMonitorID));
1219  bHaveLastMonitorID = TRUE;
1220 
1221  /* Mark it valid */
1222  ChildExtension->EdidValid = TRUE;
1223  }
1224  else
1225  {
1226  /* Mark it invalid */
1227  ChildExtension->EdidValid = FALSE;
1228  // FIXME: the following break workarounds CORE-16695
1229  // but prevents graphic cards to return an invalid
1230  // EDID as first child, and a valid one as second child.
1231  break;
1232  }
1233  }
1234  }
1235  else if (Status == VIDEO_ENUM_INVALID_DEVICE)
1236  {
1237  WARN_(VIDEOPRT, "Child device %d is invalid!\n", ChildEnumInfo.ChildIndex);
1238  IoDeleteDevice(ChildDeviceObject);
1239  continue;
1240  }
1241  else if (Status == VIDEO_ENUM_NO_MORE_DEVICES)
1242  {
1243  INFO_(VIDEOPRT, "End of child enumeration! (%d children enumerated)\n", i - 1);
1244  IoDeleteDevice(ChildDeviceObject);
1245  break;
1246  }
1247  else
1248  {
1249  WARN_(VIDEOPRT, "HwGetVideoChildDescriptor returned unknown status code 0x%x!\n", Status);
1250  IoDeleteDevice(ChildDeviceObject);
1251  break;
1252  }
1253 
1254  if (ChildExtension->ChildType == Monitor)
1255  {
1256  UINT j;
1257  PUCHAR p = ChildExtension->ChildDescriptor;
1258  INFO_(VIDEOPRT, "Monitor device enumerated! (ChildId = 0x%x)\n", ChildExtension->ChildId);
1259  for (j = 0; j < sizeof (ChildExtension->ChildDescriptor); j += 8)
1260  {
1261  INFO_(VIDEOPRT, "%02x %02x %02x %02x %02x %02x %02x %02x\n",
1262  p[j + 0], p[j + 1], p[j + 2], p[j + 3],
1263  p[j + 4], p[j + 5], p[j + 6], p[j + 7]);
1264  }
1265  }
1266  else if (ChildExtension->ChildType == Other)
1267  {
1268  INFO_(VIDEOPRT, "\"Other\" device enumerated: DeviceId = %S\n", (PWSTR)ChildExtension->ChildDescriptor);
1269  }
1270  else
1271  {
1272  ERR_(VIDEOPRT, "HwGetVideoChildDescriptor returned unsupported type: %d\n", ChildExtension->ChildType);
1273  }
1274 
1275  /* Clear the init flag */
1276  ChildDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
1277 
1278  InsertTailList(&DeviceExtension->ChildDeviceList,
1279  &ChildExtension->ListEntry);
1280  }
1281 
1282  /* Trigger reenumeration by the PnP manager */
1284 
1285  return NO_ERROR;
1286 }
#define DO_DEVICE_INITIALIZING
Definition: env_spec_w32.h:399
_Must_inspect_result_ typedef _In_ PVOID Unused
Definition: iotypes.h:1129
#define TRUE
Definition: types.h:120
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
VIDEO_CHILD_TYPE ChildType
Definition: videoprt.h:118
#define INFO_(ch,...)
Definition: debug.h:159
PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor
Definition: video.h:677
VIDEO_PORT_DRIVER_EXTENSION * DriverExtension
Definition: videoprt.h:103
uint16_t * PWSTR
Definition: typedefs.h:55
VIDEO_HW_INITIALIZATION_DATA InitializationData
Definition: videoprt.h:72
unsigned char * PUCHAR
Definition: retypes.h:3
#define ERR_(ch,...)
Definition: debug.h:156
ULONG ChildDescriptorSize
Definition: video.h:262
#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension)
Definition: videoprt.h:137
#define InsertTailList(ListHead, Entry)
#define NO_ERROR
Definition: dderror.h:5
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
Definition: rtlfuncs.h:57
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 FILE_DEVICE_CONTROLLER
Definition: winioctl.h:109
PDEVICE_OBJECT PhysicalDeviceObject
Definition: videoprt.h:87
#define VIDEO_PORT_GET_CHILD_EXTENSION(MiniportExtension)
Definition: videoprt.h:131
VIDEO_PORT_COMMON_EXTENSION Common
Definition: videoprt.h:115
PVOID DeviceExtension
Definition: env_spec_w32.h:418
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
#define VIDEO_ENUM_MORE_DEVICES
Definition: video.h:139
PDRIVER_OBJECT DriverObject
Definition: videoprt.h:123
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 GLint GLint j
Definition: glfuncs.h:250
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
Definition: video.h:273
unsigned char UCHAR
Definition: xmlstorage.h:181
Status
Definition: gdiplustypes.h:24
PDRIVER_OBJECT DriverObject
Definition: videoprt.h:86
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1251
VOID NTAPI IoInvalidateDeviceRelations(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_RELATION_TYPE Type)
Definition: pnpmgr.c:5183
Definition: video.h:270
unsigned int UINT
Definition: ndis.h:50
PDEVICE_OBJECT PhysicalDeviceObject
Definition: videoprt.h:124
unsigned int ULONG
Definition: retypes.h:1
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1031
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
PVOID ChildHwDeviceExtension
Definition: video.h:265
#define FILE_DEVICE_SECURE_OPEN
Definition: cdrw_usr.h:46
GLfloat GLfloat p
Definition: glext.h:8902
#define VIDEO_ENUM_NO_MORE_DEVICES
Definition: video.h:140
#define WARN_(ch,...)
Definition: debug.h:157
#define RtlCompareMemory(s1, s2, l)
Definition: env_spec_w32.h:465
#define VIDEO_ENUM_INVALID_DEVICE
Definition: video.h:141

Referenced by IntVideoPortFindAdapter(), and VBEInitialize().

◆ VideoPortGetAssociatedDeviceExtension()

PVOID NTAPI VideoPortGetAssociatedDeviceExtension ( IN PVOID  DeviceObject)

Definition at line 1323 of file videoprt.c.

1325 {
1326  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
1327 
1328  TRACE_(VIDEOPRT, "VideoPortGetAssociatedDeviceExtension\n");
1329  DeviceExtension = ((PDEVICE_OBJECT)DeviceObject)->DeviceExtension;
1330  if (!DeviceExtension)
1331  return NULL;
1332  return DeviceExtension->MiniPortDeviceExtension;
1333 }
struct _DEVICE_OBJECT * PDEVICE_OBJECT
smooth NULL
Definition: ftsmooth.c:416
#define TRACE_(x)
Definition: compat.h:66
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560

◆ VideoPortGetCurrentIrql()

UCHAR NTAPI VideoPortGetCurrentIrql ( VOID  )

Definition at line 826 of file videoprt.c.

827 {
828  return KeGetCurrentIrql();
829 }
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706

◆ VideoPortGetRegistryParameters()

VP_STATUS NTAPI VideoPortGetRegistryParameters ( IN PVOID  HwDeviceExtension,
IN PWSTR  ParameterName,
IN UCHAR  IsParameterFileName,
IN PMINIPORT_GET_REGISTRY_ROUTINE  GetRegistryRoutine,
IN PVOID  HwContext 
)

Definition at line 867 of file videoprt.c.

873 {
876  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
878 
879  DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
880 
881  TRACE_(VIDEOPRT, "VideoPortGetRegistryParameters ParameterName %S, RegPath: %wZ\n",
882  ParameterName, &DeviceExtension->RegistryPath);
883 
884  Context.HwDeviceExtension = HwDeviceExtension;
885  Context.HwContext = HwContext;
886  Context.HwGetRegistryRoutine = GetRegistryRoutine;
887 
891 
893  DeviceExtension->RegistryPath.Buffer,
894  QueryTable,
895  &Context,
896  NULL);
897  if (!NT_SUCCESS(Status))
898  {
899  WARN_(VIDEOPRT, "VideoPortGetRegistryParameters could not find the "
900  "requested parameter\n");
902  }
903 
904  if (IsParameterFileName)
905  {
906  /* FIXME: need to read the contents of the file */
908  }
909 
910  return NO_ERROR;
911 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
_In_ PCWSTR _Inout_ _At_ QueryTable _Pre_unknown_ PRTL_QUERY_REGISTRY_TABLE QueryTable
Definition: rtlfuncs.h:4051
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
LONG NTSTATUS
Definition: precomp.h:26
_Must_inspect_result_ _In_ PVOID _In_ struct _HW_INITIALIZATION_DATA _In_ PVOID HwContext
Definition: srb.h:664
#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension)
Definition: videoprt.h:137
#define NO_ERROR
Definition: dderror.h:5
PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
Definition: nt_native.h:109
smooth NULL
Definition: ftsmooth.c:416
static NTSTATUS NTAPI QueryRegistryCallback(IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
Definition: videoprt.c:841
#define TRACE_(x)
Definition: compat.h:66
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define RTL_REGISTRY_ABSOLUTE
Definition: nt_native.h:161
Status
Definition: gdiplustypes.h:24
_In_opt_ PWSTR _In_ PWSTR ParameterName
Definition: classpnp.h:1209
struct tagContext Context
Definition: acpixf.h:1034
#define UNIMPLEMENTED
Definition: debug.h:114
UNICODE_STRING RegistryPath
Definition: videoprt.h:90
#define RTL_QUERY_REGISTRY_REQUIRED
Definition: nt_native.h:132
#define WARN_(ch,...)
Definition: debug.h:157

◆ VideoPortGetRomImage()

PVOID NTAPI VideoPortGetRomImage ( IN PVOID  HwDeviceExtension,
IN PVOID  Unused1,
IN ULONG  Unused2,
IN ULONG  Length 
)

Definition at line 977 of file videoprt.c.

982 {
983  static PVOID RomImageBuffer = NULL;
984  PKPROCESS CallingProcess;
986 
987  TRACE_(VIDEOPRT, "VideoPortGetRomImage(HwDeviceExtension 0x%X Length 0x%X)\n",
988  HwDeviceExtension, Length);
989 
990  /* If the length is zero then free the existing buffer. */
991  if (Length == 0)
992  {
993  if (RomImageBuffer != NULL)
994  {
995  ExFreePool(RomImageBuffer);
996  RomImageBuffer = NULL;
997  }
998  return NULL;
999  }
1000  else
1001  {
1002  /*
1003  * The DDK says we shouldn't use the legacy C0000 method but get the
1004  * rom base address from the corresponding pci or acpi register but
1005  * lets ignore that and use C0000 anyway. We have already mapped the
1006  * bios area into memory so we'll copy from there.
1007  */
1008 
1009  /* Copy the bios. */
1010  Length = min(Length, 0x10000);
1011  if (RomImageBuffer != NULL)
1012  {
1013  ExFreePool(RomImageBuffer);
1014  }
1015 
1016  RomImageBuffer = ExAllocatePool(PagedPool, Length);
1017  if (RomImageBuffer == NULL)
1018  {
1019  return NULL;
1020  }
1021 
1022  IntAttachToCSRSS(&CallingProcess, &ApcState);
1023  RtlCopyMemory(RomImageBuffer, (PUCHAR)0xC0000, Length);
1024  IntDetachFromCSRSS(&CallingProcess, &ApcState);
1025 
1026  return RomImageBuffer;
1027  }
1028 }
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
KAPC_STATE
Definition: ketypes.h:1273
unsigned char * PUCHAR
Definition: retypes.h:3
smooth NULL
Definition: ftsmooth.c:416
#define TRACE_(x)
Definition: compat.h:66
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
#define ExAllocatePool(type, size)
Definition: fbtusb.h:44
VOID FASTCALL IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState)
Definition: videoprt.c:439
_Out_ PKAPC_STATE ApcState
Definition: mm.h:1492
#define min(a, b)
Definition: monoChain.cc:55
VOID FASTCALL IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState)
Definition: videoprt.c:452
#define ExFreePool(addr)
Definition: env_spec_w32.h:352

◆ VideoPortGetVersion()

VP_STATUS NTAPI VideoPortGetVersion ( IN PVOID  HwDeviceExtension,
IN OUT PVPOSVERSIONINFO  VpOsVersionInfo 
)

Definition at line 1340 of file videoprt.c.

1343 {
1345 
1346  Version.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
1347  if (VpOsVersionInfo->Size >= sizeof(VPOSVERSIONINFO))
1348  {
1349 #if 1
1351  {
1352  VpOsVersionInfo->MajorVersion = Version.dwMajorVersion;
1353  VpOsVersionInfo->MinorVersion = Version.dwMinorVersion;
1354  VpOsVersionInfo->BuildNumber = Version.dwBuildNumber;
1355  VpOsVersionInfo->ServicePackMajor = Version.wServicePackMajor;
1356  VpOsVersionInfo->ServicePackMinor = Version.wServicePackMinor;
1357  return NO_ERROR;
1358  }
1359  return ERROR_INVALID_PARAMETER;
1360 #else
1361  VpOsVersionInfo->MajorVersion = 5;
1362  VpOsVersionInfo->MinorVersion = 0;
1363  VpOsVersionInfo->BuildNumber = 2195;
1364  VpOsVersionInfo->ServicePackMajor = 4;
1365  VpOsVersionInfo->ServicePackMinor = 0;
1366  return NO_ERROR;
1367 #endif
1368  }
1369 
1370  return ERROR_INVALID_PARAMETER;
1371 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
IN PVOID IN PVOID IN USHORT Version
Definition: pci.h:359
NTSTATUS NTAPI RtlGetVersion(IN OUT PRTL_OSVERSIONINFOW lpVersionInformation)
Definition: version.c:158
#define NO_ERROR
Definition: dderror.h:5
struct _OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32

◆ VideoPortGetVgaStatus()

VP_STATUS NTAPI VideoPortGetVgaStatus ( IN PVOID  HwDeviceExtension,
OUT PULONG  VgaStatus 
)

Definition at line 949 of file videoprt.c.

952 {
953  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
954 
955  TRACE_(VIDEOPRT, "VideoPortGetVgaStatus\n");
956 
957  DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
959  {
960  if (DeviceExtension->AdapterInterfaceType == PCIBus)
961  {
962  /* VgaStatus: 0 == VGA not enabled, 1 == VGA enabled. */
963  /* Assumed for now */
964  *VgaStatus = 1;
965  return NO_ERROR;
966  }
967  }
968 
969  return ERROR_INVALID_FUNCTION;
970 }
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
#define ERROR_INVALID_FUNCTION
Definition: dderror.h:6
#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension)
Definition: videoprt.h:137
#define NO_ERROR
Definition: dderror.h:5
#define TRACE_(x)
Definition: compat.h:66
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
INTERFACE_TYPE AdapterInterfaceType
Definition: videoprt.h:98

◆ VideoPortInitialize()

ULONG NTAPI VideoPortInitialize ( IN PVOID  Context1,
IN PVOID  Context2,
IN PVIDEO_HW_INITIALIZATION_DATA  HwInitializationData,
IN PVOID  HwContext 
)

Definition at line 588 of file videoprt.c.

593 {
598  BOOLEAN PnpDriver = FALSE, LegacyDetection = FALSE;
599  static BOOLEAN FirstInitialization;
600 
601  TRACE_(VIDEOPRT, "VideoPortInitialize\n");
602 
603  if (!FirstInitialization)
604  {
605  FirstInitialization = TRUE;
609  }
610 
611  /* As a first thing do parameter checks. */
612  if (HwInitializationData->HwInitDataSize > sizeof(VIDEO_HW_INITIALIZATION_DATA))
613  {
614  ERR_(VIDEOPRT, "Invalid HwInitializationData\n");
616  }
617 
618  if ((HwInitializationData->HwFindAdapter == NULL) ||
619  (HwInitializationData->HwInitialize == NULL) ||
620  (HwInitializationData->HwStartIO == NULL))
621  {
622  ERR_(VIDEOPRT, "Invalid HwInitializationData\n");
624  }
625 
626  switch (HwInitializationData->HwInitDataSize)
627  {
628  /*
629  * NT4 drivers are special case, because we must use legacy method
630  * of detection instead of the Plug & Play one.
631  */
633  INFO_(VIDEOPRT, "We were loaded by a Windows NT miniport driver.\n");
634  break;
635 
637  INFO_(VIDEOPRT, "We were loaded by a Windows 2000 miniport driver.\n");
638  break;
639 
640  case sizeof(VIDEO_HW_INITIALIZATION_DATA):
641  INFO_(VIDEOPRT, "We were loaded by a Windows XP or later miniport driver.\n");
642  break;
643 
644  default:
645  ERR_(VIDEOPRT, "Invalid HwInitializationData size.\n");
646  return STATUS_UNSUCCESSFUL;
647  }
648 
649  /* Set dispatching routines */
657 
658  /* Determine type of the miniport driver */
659  if ((HwInitializationData->HwInitDataSize >=
660  FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, HwQueryInterface)) &&
661  (HwInitializationData->HwSetPowerState != NULL) &&
662  (HwInitializationData->HwGetPowerState != NULL) &&
663  (HwInitializationData->HwGetVideoChildDescriptor != NULL))
664  {
665  INFO_(VIDEOPRT, "The miniport is a PnP miniport driver\n");
666  PnpDriver = TRUE;
667  }
668 
669  /* Check if legacy detection should be applied */
670  if (!PnpDriver || HwContext)
671  {
672  INFO_(VIDEOPRT, "Legacy detection for adapter interface %d\n",
673  HwInitializationData->AdapterInterfaceType);
674 
675  /* FIXME: Move the code for legacy detection
676  to another function and call it here */
677  LegacyDetection = TRUE;
678  }
679 
680  /*
681  * NOTE:
682  * The driver extension can be already allocated in case that we were
683  * called by legacy driver and failed detecting device. Some miniport
684  * drivers in that case adjust parameters and call VideoPortInitialize
685  * again.
686  */
688  if (DriverExtension == NULL)
689  {
691  DriverObject,
693  (PVOID *)&DriverExtension);
694  if (!NT_SUCCESS(Status))
695  {
696  ERR_(VIDEOPRT, "IoAllocateDriverObjectExtension failed 0x%x\n", Status);
697  return Status;
698  }
699 
700  /*
701  * Save the registry path. This should be done only once even if
702  * VideoPortInitialize is called multiple times.
703  */
704  if (RegistryPath->Length != 0)
705  {
706  DriverExtension->RegistryPath.Length = 0;
707  DriverExtension->RegistryPath.MaximumLength =
708  RegistryPath->Length + sizeof(UNICODE_NULL);
709  DriverExtension->RegistryPath.Buffer =
711  PagedPool,
712  DriverExtension->RegistryPath.MaximumLength,
713  'RTSU');
714  if (DriverExtension->RegistryPath.Buffer == NULL)
715  {
716  RtlInitUnicodeString(&DriverExtension->RegistryPath, NULL);
718  }
719 
721  INFO_(VIDEOPRT, "RegistryPath: %wZ\n", &DriverExtension->RegistryPath);
722  }
723  else
724  {
725  RtlInitUnicodeString(&DriverExtension->RegistryPath, NULL);
726  }
727  }
728 
729  /* Copy the correct miniport initialization data to the device extension. */
730  RtlCopyMemory(&DriverExtension->InitializationData,
732  HwInitializationData->HwInitDataSize);
733  if (HwInitializationData->HwInitDataSize <
735  {
736  RtlZeroMemory((PVOID)((ULONG_PTR)&DriverExtension->InitializationData +
737  HwInitializationData->HwInitDataSize),
739  HwInitializationData->HwInitDataSize);
740  }
741  DriverExtension->HwContext = HwContext;
742 
743  /*
744  * Plug & Play drivers registers the device in AddDevice routine.
745  * For legacy drivers we must do it now.
746  */
747  if (LegacyDetection)
748  {
750 
752  {
753  /* Power management */
755  }
756 
759  NULL,
760  &DeviceObject);
761  if (!NT_SUCCESS(Status))
762  {
763  ERR_(VIDEOPRT, "IntVideoPortCreateAdapterDeviceObject returned 0x%x\n", Status);
764  return Status;
765  }
766 
768  if (NT_SUCCESS(Status))
770  else
771  ERR_(VIDEOPRT, "IntVideoPortFindAdapter returned 0x%x\n", Status);
772 
773  return Status;
774  }
775  else
776  {
781 
782  return STATUS_SUCCESS;
783  }
784 }
VOID FASTCALL IntLoadRegistryParameters(VOID)
Definition: videoprt.c:464
NTSTATUS NTAPI IntVideoPortFindAdapter(IN PDRIVER_OBJECT DriverObject, IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension, IN PDEVICE_OBJECT DeviceObject)
Definition: videoprt.c:252
#define STATUS_REVISION_MISMATCH
Definition: ntstatus.h:311
NTSTATUS NTAPI IntVideoPortDispatchPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: dispatch.c:1115
#define TRUE
Definition: types.h:120
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
#define IRP_MJ_CREATE
Definition: rdpdr.c:44
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define INFO_(ch,...)
Definition: debug.h:159
NTSTATUS NTAPI IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress, IN ULONG DriverObjectExtensionSize, OUT PVOID *DriverObjectExtension)
Definition: driver.c:1779
#define IRP_MJ_SHUTDOWN
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define IRP_MJ_PNP
Definition: cdrw_usr.h:52
#define ERR_(ch,...)
Definition: debug.h:156
LONG NTSTATUS
Definition: precomp.h:26
_Must_inspect_result_ _In_ PVOID _In_ struct _HW_INITIALIZATION_DATA _In_ PVOID HwContext
Definition: srb.h:664
KMUTEX VideoPortInt10Mutex
Definition: videoprt.c:39
NTSTATUS NTAPI IntVideoPortDispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: dispatch.c:714
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
uint32_t ULONG_PTR
Definition: typedefs.h:64
#define UNICODE_NULL
PDRIVER_EXTENSION DriverExtension
Definition: iotypes.h:2174
VOID NTAPI IntVideoPortUnload(PDRIVER_OBJECT DriverObject)
Definition: dispatch.c:1171
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
Definition: kefuncs.h:238
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
struct _VIDEO_HW_INITIALIZATION_DATA VIDEO_HW_INITIALIZATION_DATA
static PDRIVER_OBJECT DriverObject
Definition: template.c:42
KSPIN_LOCK HwResetAdaptersLock
Definition: videoprt.c:40
NTSTATUS NTAPI IntVideoPortDispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: dispatch.c:429
#define TRACE_(x)
Definition: compat.h:66
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA
Definition: video.h:119
NTSTATUS NTAPI IntVideoPortDispatchSystemControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: dispatch.c:1149
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
VOID NTAPI KeInitializeMutex(IN PKMUTEX Mutex, IN ULONG Level)
Definition: mutex.c:67
#define IRP_MJ_POWER
#define IRP_MJ_CLOSE
Definition: rdpdr.c:45
NTSTATUS NTAPI IntVideoPortAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject)
Definition: dispatch.c:334
PDRIVER_UNLOAD DriverUnload
Definition: iotypes.h:2180
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
Definition: driver.c:1857
PPCI_DRIVER_EXTENSION DriverExtension
Definition: pci.c:41
#define IRP_MJ_SYSTEM_CONTROL
_In_ PNET_PNP_EVENT _In_ PTDI_PNP_CONTEXT _In_ PTDI_PNP_CONTEXT Context2
Definition: tdikrnl.h:1094
Status
Definition: gdiplustypes.h:24
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560
PDRIVER_ADD_DEVICE AddDevice
Definition: iotypes.h:2112
ULONG VideoPortDeviceNumber
Definition: videoprt.c:38
_In_ PNET_PNP_EVENT _In_ PTDI_PNP_CONTEXT Context1
Definition: tdikrnl.h:1094
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:254
NTSTATUS NTAPI IntVideoPortDispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: dispatch.c:1083
NTSTATUS NTAPI IntVideoPortDispatchOpen(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: dispatch.c:366
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1]
Definition: iotypes.h:2181
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
_In_ PUNICODE_STRING RegistryPath
Definition: wmip.h:28
NTSTATUS NTAPI IntVideoPortCreateAdapterDeviceObject(IN PDRIVER_OBJECT DriverObject, IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension, IN PDEVICE_OBJECT PhysicalDeviceObject, OUT PDEVICE_OBJECT *DeviceObject OPTIONAL)
Definition: videoprt.c:92
#define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA
Definition: video.h:120
return STATUS_SUCCESS
Definition: btrfs.c:2938
_Must_inspect_result_ _In_ PVOID _In_ struct _HW_INITIALIZATION_DATA * HwInitializationData
Definition: srb.h:664
#define IRP_MJ_DEVICE_CONTROL
Definition: rdpdr.c:52

Referenced by DriverEntry().

◆ VideoPortIsNoVesa()

BOOLEAN NTAPI VideoPortIsNoVesa ( VOID  )

Definition at line 1535 of file videoprt.c.

1536 {
1537  return VpNoVesa;
1538 }
BOOLEAN VpNoVesa
Definition: videoprt.c:35

Referenced by InitializeModeTable(), and VBEFindAdapter().

◆ VideoPortLogError()

VOID NTAPI VideoPortLogError ( IN PVOID  HwDeviceExtension,
IN PVIDEO_REQUEST_PACKET Vrp  OPTIONAL,
IN VP_STATUS  ErrorCode,
IN ULONG  UniqueId 
)

Definition at line 807 of file videoprt.c.

812 {
814 
815  INFO_(VIDEOPRT, "VideoPortLogError ErrorCode %d (0x%x) UniqueId %lu (0x%lx)\n",
816  ErrorCode, ErrorCode, UniqueId, UniqueId);
817  if (Vrp)
818  INFO_(VIDEOPRT, "Vrp->IoControlCode %lu (0x%lx)\n", Vrp->IoControlCode, Vrp->IoControlCode);
819 }
_In_ NDIS_ERROR_CODE ErrorCode
Definition: ndis.h:4436
#define INFO_(ch,...)
Definition: debug.h:159
#define UNIMPLEMENTED
Definition: debug.h:114

◆ VideoPortQueryPerformanceCounter()

LONGLONG NTAPI VideoPortQueryPerformanceCounter ( IN PVOID  HwDeviceExtension,
OUT PLONGLONG PerformanceFrequency  OPTIONAL 
)

Definition at line 1454 of file videoprt.c.

1457 {
1459 
1460  TRACE_(VIDEOPRT, "VideoPortQueryPerformanceCounter\n");
1461  Result = KeQueryPerformanceCounter((PLARGE_INTEGER)PerformanceFrequency);
1462  return Result.QuadPart;
1463 }
LARGE_INTEGER NTAPI KeQueryPerformanceCounter(IN PLARGE_INTEGER PerformanceFreq)
Definition: timer.c:138
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
#define TRACE_(x)
Definition: compat.h:66

◆ VideoPortQueueDpc()

BOOLEAN NTAPI VideoPortQueueDpc ( IN PVOID  HwDeviceExtension,
IN PMINIPORT_DPC_ROUTINE  CallbackRoutine,
IN PVOID  Context 
)

Definition at line 1307 of file videoprt.c.

1311 {
1312  return KeInsertQueueDpc(
1313  &VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension)->DpcObject,
1315  (PVOID)Context);
1316 }
BOOLEAN NTAPI KeInsertQueueDpc(IN PKDPC Dpc, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
Definition: dpc.c:724
#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension)
Definition: videoprt.h:137
_Must_inspect_result_ _In_ PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine
Definition: fltkernel.h:1035

◆ VideoPortRegisterBugcheckCallback()

VP_STATUS NTAPI VideoPortRegisterBugcheckCallback ( IN PVOID  HwDeviceExtension,
IN ULONG  BugcheckCode,
IN PVIDEO_BUGCHECK_CALLBACK  Callback,
IN ULONG  BugcheckDataSize 
)

Definition at line 1439 of file videoprt.c.

1444 {
1445  UNIMPLEMENTED;
1446  return NO_ERROR;
1447 }
#define NO_ERROR
Definition: dderror.h:5
#define UNIMPLEMENTED
Definition: debug.h:114

◆ VideoPortReleaseDeviceLock()

VOID NTAPI VideoPortReleaseDeviceLock ( IN PVOID  HwDeviceExtension)

Definition at line 1490 of file videoprt.c.

1492 {
1493  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
1494  LONG Status;
1495 
1497 
1498  TRACE_(VIDEOPRT, "VideoPortReleaseDeviceLock\n");
1499  DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
1500  Status = KeReleaseMutex(&DeviceExtension->DeviceLock, FALSE);
1501  //ASSERT(Status == STATUS_SUCCESS);
1502 }
#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension)
Definition: videoprt.h:137
LONG NTAPI KeReleaseMutex(IN PKMUTEX Mutex, IN BOOLEAN Wait)
Definition: mutex.c:189
#define UNREFERENCED_LOCAL_VARIABLE(L)
Definition: ntbasedef.h:324
long LONG
Definition: pedump.c:60
#define TRACE_(x)
Definition: compat.h:66
Status
Definition: gdiplustypes.h:24

◆ VideoPortScanRom()

BOOLEAN NTAPI VideoPortScanRom ( IN PVOID  HwDeviceExtension,
IN PUCHAR  RomBase,
IN ULONG  RomLength,
IN PUCHAR  String 
)

Definition at line 1035 of file videoprt.c.

1040 {
1041  SIZE_T StringLength;
1042  BOOLEAN Found;
1043  PUCHAR SearchLocation;
1044 
1045  TRACE_(VIDEOPRT, "VideoPortScanRom RomBase %p RomLength 0x%x String %s\n", RomBase, RomLength, String);
1046 
1047  StringLength = strlen((PCHAR)String);
1048  Found = FALSE;
1049  SearchLocation = RomBase;
1050  for (SearchLocation = RomBase;
1051  !Found && SearchLocation < RomBase + RomLength - StringLength;
1052  SearchLocation++)
1053  {
1054  Found = (RtlCompareMemory(SearchLocation, String, StringLength) == StringLength);
1055  if (Found)
1056  {
1057  INFO_(VIDEOPRT, "Match found at %p\n", SearchLocation);
1058  }
1059  }
1060 
1061  return Found;
1062 }
signed char * PCHAR
Definition: retypes.h:7
#define INFO_(ch,...)
Definition: debug.h:159
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
unsigned char * PUCHAR
Definition: retypes.h:3
static WCHAR String[]
Definition: stringtable.c:55
unsigned char BOOLEAN
return Found
Definition: dirsup.c:1270
#define TRACE_(x)
Definition: compat.h:66
ULONG_PTR SIZE_T
Definition: typedefs.h:79
#define RtlCompareMemory(s1, s2, l)
Definition: env_spec_w32.h:465

◆ VideoPortSetRegistryParameters()

VP_STATUS NTAPI VideoPortSetRegistryParameters ( IN PVOID  HwDeviceExtension,
IN PWSTR  ValueName,
IN PVOID  ValueData,
IN ULONG  ValueLength 
)

Definition at line 918 of file videoprt.c.

923 {
924  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
926 
927  DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
928  TRACE_(VIDEOPRT, "VideoPortSetRegistryParameters ParameterName %S, RegPath: %wZ\n",
929  ValueName,
930  &DeviceExtension->RegistryPath);
933  DeviceExtension->RegistryPath.Buffer,
934  ValueName,
935  REG_BINARY,
936  ValueData,
937  ValueLength);
938  if (Status != NO_ERROR)
939  WARN_(VIDEOPRT, "VideoPortSetRegistryParameters error 0x%x\n", Status);
940 
941  return Status;
942 }
#define ASSERT_IRQL_LESS_OR_EQUAL(x)
Definition: debug.h:251
#define REG_BINARY
Definition: nt_native.h:1496
#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension)
Definition: videoprt.h:137
#define NO_ERROR
Definition: dderror.h:5
_In_ PUNICODE_STRING ValueName
Definition: cmfuncs.h:264
NTSYSAPI NTSTATUS WINAPI RtlWriteRegistryValue(ULONG, PCWSTR, PCWSTR, ULONG, PVOID, ULONG)
#define TRACE_(x)
Definition: compat.h:66
_In_ GUID _In_ PVOID ValueData
Definition: hubbusif.h:311
_In_ GUID _In_ PVOID _In_ ULONG ValueLength
Definition: hubbusif.h:311
#define RTL_REGISTRY_ABSOLUTE
Definition: nt_native.h:161
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
Status
Definition: gdiplustypes.h:24
LONG VP_STATUS
Definition: video.h:153
UNICODE_STRING RegistryPath
Definition: videoprt.h:90
#define WARN_(ch,...)
Definition: debug.h:157

Referenced by VmxFindAdapter().

◆ VideoPortSynchronizeExecution()

BOOLEAN NTAPI VideoPortSynchronizeExecution ( IN PVOID  HwDeviceExtension,
IN VIDEO_SYNCHRONIZE_PRIORITY  Priority,
IN PMINIPORT_SYNCHRONIZE_ROUTINE  SynchronizeRoutine,
OUT PVOID  Context 
)

Definition at line 1069 of file videoprt.c.

1074 {
1075  BOOLEAN Ret;
1076  PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension;
1077  KIRQL OldIrql;
1078 
1079  switch (Priority)
1080  {
1081  case VpLowPriority:
1082  Ret = (*SynchronizeRoutine)(Context);
1083  break;
1084 
1085  case VpMediumPriority:
1086  DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension);
1087  if (DeviceExtension->InterruptObject == NULL)
1088  Ret = (*SynchronizeRoutine)(Context);
1089  else
1090  Ret = KeSynchronizeExecution(
1091  DeviceExtension->InterruptObject,
1093  Context);
1094  break;
1095 
1096  case VpHighPriority:
1098  if (OldIrql < SYNCH_LEVEL)
1100 
1101  Ret = (*SynchronizeRoutine)(Context);
1102 
1103  if (OldIrql < SYNCH_LEVEL)
1105  break;
1106 
1107  default:
1108  Ret = FALSE;
1109  }
1110 
1111  return Ret;
1112 }
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
#define KeRaiseIrql(irql, oldIrql)
Definition: env_spec_w32.h:597
#define KeLowerIrql(oldIrql)
Definition: env_spec_w32.h:602
_In_ KPRIORITY Priority
Definition: kefuncs.h:503
#define VIDEO_PORT_GET_DEVICE_EXTENSION(MiniportExtension)
Definition: videoprt.h:137
UCHAR KIRQL
Definition: env_spec_w32.h:591
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
_In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine
Definition: kefuncs.h:536
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:790
#define SYNCH_LEVEL
Definition: env_spec_w32.h:704
struct tagContext Context
Definition: acpixf.h:1034
BOOLEAN NTAPI KeSynchronizeExecution(IN OUT PKINTERRUPT Interrupt, IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, IN PVOID SynchronizeContext OPTIONAL)
Definition: interrupt.c:142

◆ VpNotifyEaData()

VOID NTAPI VpNotifyEaData ( IN PDEVICE_OBJECT  DeviceObject,
IN PVOID  Data 
)

Definition at line 1509 of file videoprt.c.

1512 {
1513  UNIMPLEMENTED;
1514 }
#define UNIMPLEMENTED
Definition: debug.h:114

Variable Documentation

◆ CsrProcess

◆ HwResetAdaptersLock

KSPIN_LOCK HwResetAdaptersLock

◆ VideoPortDeviceNumber

ULONG VideoPortDeviceNumber = 0

◆ VideoPortInt10Mutex

KMUTEX VideoPortInt10Mutex

Definition at line 39 of file videoprt.c.

Referenced by IntInt10CallBios(), and VideoPortInitialize().

◆ VpBaseVideo

BOOLEAN VpBaseVideo = FALSE

Definition at line 34 of file videoprt.c.

Referenced by IntLoadRegistryParameters().

◆ VpNoVesa

BOOLEAN VpNoVesa = FALSE

Definition at line 35 of file videoprt.c.

Referenced by IntLoadRegistryParameters(), and VideoPortIsNoVesa().