28 WCHAR DeviceNameBuffer[32];
31 TRACE_(SERIAL,
"SerialAddDeviceInternal()\n");
48 WARN_(SERIAL,
"IoCreateDevice() failed with status 0x%08x\n",
Status);
59 WARN_(SERIAL,
"IoRegisterDeviceInterface() failed with status 0x%08x\n",
Status);
64 if (pComPortNumber ==
NULL)
67 DeviceExtension->
ComPort = *pComPortNumber;
68 DeviceExtension->
Pdo =
Pdo;
70 DeviceExtension->
UartType = UartType;
85 WARN_(SERIAL,
"IoAttachDeviceToDeviceStackSafe() failed with status 0x%08x\n",
Status);
142 WCHAR DeviceNameBuffer[32];
144 WCHAR LinkNameBuffer[32];
146 WCHAR ComPortBuffer[32];
167 WARN_(SERIAL,
"No allocated resources sent to driver\n");
172 WARN_(SERIAL,
"Wrong number of allocated resources sent to driver\n");
175 if (
ResourceList->List[0].PartialResourceList.Version != 1
176 ||
ResourceList->List[0].PartialResourceList.Revision != 1
177 || ResourceListTranslated->List[0].PartialResourceList.Version != 1
178 || ResourceListTranslated->List[0].PartialResourceList.Revision != 1)
180 WARN_(SERIAL,
"Revision mismatch: %u.%u != 1.1 or %u.%u != 1.1\n",
183 ResourceListTranslated->List[0].PartialResourceList.Version,
184 ResourceListTranslated->List[0].PartialResourceList.Revision);
195 switch (PartialDescriptor->
Type)
198 if (PartialDescriptor->
u.
Port.Length < 7)
216 INFO_(SERIAL,
"New COM port. Base = 0x%lx, Irql = %u\n",
225 INFO_(SERIAL,
"Comparing addresses: KdComPortInUse: %p, ComPortBase: %p\n",
KdComPortInUse, ComPortBase);
228 INFO_(SERIAL,
"Failing IRP_MN_START_DEVICE as this serial port is used for debugging\n");
244 WARN_(SERIAL,
"SerialSetBaudRate() failed with status 0x%08x\n",
Status);
255 WARN_(SERIAL,
"SerialSetLineControl() failed with status 0x%08x\n",
Status);
269 swprintf(LinkNameBuffer,
L"\\DosDevices\\COM%lu", DeviceExtension->
ComPort);
277 WARN_(SERIAL,
"IoCreateSymbolicLink() failed with status 0x%08x\n",
Status);
290 WARN_(SERIAL,
"IoConnectInterrupt() failed with status 0x%08x\n",
Status);
369 TRACE_(SERIAL,
"IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
384 Stack->Parameters.StartDevice.AllocatedResources,
385 Stack->Parameters.StartDevice.AllocatedResourcesTranslated);
393 switch (
Stack->Parameters.QueryDeviceRelations.Type)
397 TRACE_(SERIAL,
"IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
402 TRACE_(SERIAL,
"IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
406 TRACE_(SERIAL,
"IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
407 Stack->Parameters.QueryDeviceRelations.Type);
414 TRACE_(SERIAL,
"IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
#define DO_DEVICE_INITIALIZING
#define STATUS_REVISION_MISMATCH
NTSTATUS NTAPI SerialSetLineControl(IN PSERIAL_DEVICE_EXTENSION DeviceExtension, IN PSERIAL_LINE_CONTROL NewSettings)
SERIAL_DEVICE_STATE PnpState
CIRCULAR_BUFFER OutputBuffer
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID _In_opt_ PKSPIN_LOCK _In_ ULONG _In_ KIRQL _In_ KIRQL _In_ KINTERRUPT_MODE InterruptMode
NTSTATUS FreeCircularBuffer(IN PCIRCULAR_BUFFER pBuffer)
#define STATUS_INSUFFICIENT_RESOURCES
#define OBJ_CASE_INSENSITIVE
#define READ_PORT_UCHAR(p)
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
#define IoInitializeRemoveLock(Lock, AllocateTag, MaxLockedMinutes, HighWatermark)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
BOOLEAN NTAPI IoForwardIrpSynchronously(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define SR_IER_MSR_CHANGE
VOID NTAPI SerialCompleteIrp(IN PKDPC Dpc, IN PVOID pDeviceExtension, IN PVOID pIrp, IN PVOID Unused)
SERIAL_LINE_CONTROL SerialLineControl
DRIVER_DISPATCH ForwardIrpAndForget
NTSTATUS NTAPI SerialPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
KSERVICE_ROUTINE SerialInterruptService
NTSTATUS NTAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName)
UNICODE_STRING SerialInterfaceName
KSPIN_LOCK InputBufferLock
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@383 Port
#define OBJ_KERNEL_HANDLE
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
#define CmResourceTypePort
KEVENT InputBufferNotEmpty
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_In_ PDEVICE_OBJECT DeviceObject
KSPIN_LOCK OutputBufferLock
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define SR_IER_DATA_RECEIVED
#define SR_FCR_CLEAR_XMIT
#define SR_IER_LSR_CHANGE
NTSTATUS NTAPI IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, IN PKSERVICE_ROUTINE ServiceRoutine, IN PVOID ServiceContext, IN PKSPIN_LOCK SpinLock, IN ULONG Vector, IN KIRQL Irql, IN KIRQL SynchronizeIrql, IN KINTERRUPT_MODE InterruptMode, IN BOOLEAN ShareVector, IN KAFFINITY ProcessorEnableMask, IN BOOLEAN FloatingSave)
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_ WDFDRIVER _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT Pdo
_In_ UCHAR _In_ UCHAR MinorFunction
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
enum _KINTERRUPT_MODE KINTERRUPT_MODE
#define IoCompleteRequest
NTSTATUS NTAPI IoSetDeviceInterfaceState(IN PUNICODE_STRING SymbolicLinkName, IN BOOLEAN Enable)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
NTSTATUS NTAPI SerialPnpStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PCM_RESOURCE_LIST ResourceList, IN PCM_RESOURCE_LIST ResourceListTranslated)
NTSTATUS NTAPI SerialSetBaudRate(IN PSERIAL_DEVICE_EXTENSION DeviceExtension, IN ULONG NewBaudRate)
NTSTATUS NTAPI IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName, IN PUNICODE_STRING DeviceName)
NTSTATUS NTAPI IoAttachDeviceToDeviceStackSafe(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice, IN OUT PDEVICE_OBJECT *AttachedToDeviceObject)
#define NT_SUCCESS(StatCode)
#define IRP_MN_START_DEVICE
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
#define STATUS_UNSUCCESSFUL
_Must_inspect_result_ _In_ WDFDEVICE Fdo
VOID NTAPI SerialReceiveByte(IN PKDPC Dpc, IN PVOID pDeviceExtension, IN PVOID Unused1, IN PVOID Unused2)
#define WRITE_PORT_UCHAR(p, d)
int _cdecl swprintf(const WCHAR *,...)
IO_REMOVE_LOCK RemoveLock
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
#define SR_FCR_CLEAR_RCVR
NTSTATUS NTAPI IoRegisterDeviceInterface(IN PDEVICE_OBJECT PhysicalDeviceObject, IN CONST GUID *InterfaceClassGuid, IN PUNICODE_STRING ReferenceString OPTIONAL, OUT PUNICODE_STRING SymbolicLinkName)
#define KeInitializeEvent(pEvt, foo, foo2)
NTSTATUS InitializeCircularBuffer(IN PCIRCULAR_BUFFER pBuffer, IN ULONG BufferSize)
struct _SERIAL_DEVICE_EXTENSION * PSERIAL_DEVICE_EXTENSION
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
NTSTATUS NTAPI SerialAddDeviceInternal(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT Pdo, IN UART_TYPE UartType, IN PULONG pComPortNumber OPTIONAL, OUT PDEVICE_OBJECT *pFdo OPTIONAL)
UART_TYPE SerialDetectUartType(IN PUCHAR BaseAddress)
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define CmResourceTypeInterrupt
VOID NTAPI SerialSendByte(IN PKDPC Dpc, IN PVOID pDeviceExtension, IN PVOID Unused1, IN PVOID Unused2)
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@384 Interrupt
CIRCULAR_BUFFER InputBuffer
#define CM_RESOURCE_INTERRUPT_LATCHED
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)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define InitializeObjectAttributes(p, n, a, r, s)
PDEVICE_OBJECT LowerDevice
#define FILE_DEVICE_SECURE_OPEN
NTSTATUS NTAPI SerialAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT Pdo)
#define REG_OPTION_VOLATILE
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381 u
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
#define FILE_DEVICE_SERIAL_PORT
PULONG MinorVersion OPTIONAL