ReactOS 0.4.17-dev-1281-g065abb3
xhcientry.cpp File Reference
#include <ntifs.h>
#include <ndk/exfuncs.h>
#include "xhcidrv.h"
#include <debug.h>
Include dependency graph for xhcientry.cpp:

Go to the source code of this file.

Classes

struct  _XHCI_CODE_INTEGRITY
 

Macros

#define NDEBUG
 
#define XHCI_CODE_INTEGRITY_TESTSIGN   0x00000002
 

Typedefs

typedef struct _XHCI_CODE_INTEGRITY XHCI_CODE_INTEGRITY
 

Functions

static BOOLEAN NTAPI XhciIsTestSigningOn (VOID)
 
 CODE_SEG ("INIT") NTSTATUS NTAPI DriverEntry(_In_ PDRIVER_OBJECT DriverObject
 
 if (!NT_SUCCESS(Status))
 
 if (XhciDriver.TestMode) DPRINT1("Test signing is on
 
VOID NTAPI XhciEvtDriverUnload (_In_ WDFDRIVER Driver)
 

Variables

XhciDriverData XhciDriver
 
_In_ PUNICODE_STRING RegistryPath
 
WDF_DRIVER_CONFIG Config
 
NTSTATUS Status = WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &Config, WDF_NO_HANDLE)
 
XhciDriver DriverObject = DriverObject
 
RtlInitUnicodeString & RoutineName
 
XhciDriver QueryDeviceFlags = MmGetSystemRoutineAddress(&RoutineName)
 
Config EvtDriverUnload = XhciEvtDriverUnload
 
Config DriverPoolTag = XHCI_TAG_DRIVER
 
XhciDriver TestMode = XhciIsTestSigningOn()
 
test hooks enabled n
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 12 of file xhcientry.cpp.

◆ XHCI_CODE_INTEGRITY_TESTSIGN

#define XHCI_CODE_INTEGRITY_TESTSIGN   0x00000002

Definition at line 15 of file xhcientry.cpp.

Typedef Documentation

◆ XHCI_CODE_INTEGRITY

Function Documentation

◆ CODE_SEG()

CODE_SEG ( "INIT"  )

Definition at line 246 of file Interface.c.

1817{
1818 UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\FileSystem\\Filters\\"DRIVER_NAME);
1819 PDEVICE_OBJECT RawDeviceObject;
1821 PFILE_OBJECT RawFileObject;
1823 UNICODE_STRING SymLink;
1824
1826
1829
1830 /* Save the registry key for this driver */
1834 RegistryPath->MaximumLength,
1838
1839 /* Do some initialization */
1841
1842 /* Create the main filter manager device object */
1844 0,
1845 &DeviceName,
1848 FALSE,
1849 &DeviceObject);
1850 if (!NT_SUCCESS(Status))
1851 {
1852 DPRINT1("fltmgr IoCreateDevice failed. Status = %X\n", Status);
1853 goto Cleanup;
1854 }
1855
1856 /* Store a global reference so we can access from callbacks */
1858
1859 /* Generate the symbolic link name */
1860 RtlInitUnicodeString(&SymLink, L"\\??\\"DRIVER_NAME);
1862 if (!NT_SUCCESS(Status)) goto Cleanup;
1863
1864 /* Create the callbacks for the dispatch table, FastIo and FS callbacks */
1866 if (!NT_SUCCESS(Status)) goto Cleanup;
1867
1868 /* Initialize the comms objects */
1870 if (!NT_SUCCESS(Status)) goto Cleanup;
1871
1872 /* Register for notifications when a new file system is loaded. This also enumerates any existing file systems */
1874 FLT_ASSERT(Status != STATUS_DEVICE_ALREADY_ATTACHED); // Windows checks for this, I'm not sure how it can happen. Needs investigation??
1875 if (!NT_SUCCESS(Status)) goto Cleanup;
1876
1879
1880 /* IoRegisterFsRegistrationChange isn't notified about the raw file systems, so we attach to them manually */
1881 RtlInitUnicodeString(&ObjectName, L"\\Device\\RawDisk");
1884 &RawFileObject,
1885 &RawDeviceObject);
1886 if (NT_SUCCESS(Status))
1887 {
1888 FltpFsNotification(RawDeviceObject, TRUE);
1889 ObDereferenceObject(RawFileObject);
1890 }
1891
1892 RtlInitUnicodeString(&ObjectName, L"\\Device\\RawCdRom");
1895 &RawFileObject,
1896 &RawDeviceObject);
1897 if (NT_SUCCESS(Status))
1898 {
1899 FltpFsNotification(RawDeviceObject, TRUE);
1900 ObDereferenceObject(RawFileObject);
1901 }
1902
1903 /* We're done, clear the initializing flag */
1906
1907Cleanup:
1908
1909 if (!NT_SUCCESS(Status))
1910 {
1912 {
1913 DriverObject->FastIoDispatch = NULL;
1915 }
1916
1917 IoDeleteSymbolicLink(&SymLink);
1918
1919 if (DeviceObject)
1921
1924 }
1925
1926 return Status;
1927}
LIST_ENTRY FilterList
Definition: Filter.c:24
DRIVER_FS_NOTIFICATION FltpFsNotification
Definition: Interface.c:1699
ERESOURCE FilterListLock
Definition: Filter.c:25
static NTSTATUS SetupDispatchAndCallbacksTables(_In_ PDRIVER_OBJECT DriverObject)
Definition: Interface.c:1739
DRIVER_DATA DriverData
Definition: Interface.c:35
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
#define FILE_DEVICE_SECURE_OPEN
Definition: cdrw_usr.h:46
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define RTL_CONSTANT_STRING(s)
Definition: combase.c:35
static const WCHAR Cleanup[]
Definition: register.c:80
#define L(x)
Definition: resources.c:13
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
NTSTATUS ExInitializeResourceLite(PULONG res)
Definition: env_spec_w32.h:641
#define DO_DEVICE_INITIALIZING
Definition: env_spec_w32.h:399
#define NonPagedPool
Definition: env_spec_w32.h:307
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
#define ClearFlag(_F, _SF)
Definition: ext2fs.h:191
#define DRIVER_NAME
Definition: ext2fs.h:136
#define FLT_ASSERT(_e)
Definition: fltkernel.h:49
#define FM_TAG_REGISTRY_DATA
Definition: fltmgr.h:18
#define FM_TAG_DISPATCH_TABLE
Definition: fltmgr.h:17
NTSTATUS FltpSetupCommunicationObjects(_In_ PDRIVER_OBJECT DriverObject)
Definition: Messaging.c:377
Status
Definition: gdiplustypes.h:24
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
#define FILE_READ_ATTRIBUTES
Definition: nt_native.h:647
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
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:1038
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1261
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1455
NTSTATUS NTAPI IoRegisterFsRegistrationChange(IN PDRIVER_OBJECT DriverObject, IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine)
Definition: volume.c:1089
#define STATUS_DEVICE_ALREADY_ATTACHED
Definition: ntstatus.h:386
#define FILE_DEVICE_DISK_FILE_SYSTEM
Definition: winioctl.h:53
#define STATUS_SUCCESS
Definition: shellext.h:65
PDRIVER_OBJECT DriverObject
Definition: fltmgr.h:31
UNICODE_STRING ServiceKey
Definition: fltmgr.h:33
PFAST_IO_DISPATCH FastIoDispatch
Definition: fltmgr.h:37
FAST_MUTEX FilterAttachLock
Definition: fltmgr.h:39
PDEVICE_OBJECT DeviceObject
Definition: fltmgr.h:32
USHORT MaximumLength
Definition: env_spec_w32.h:370
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint16_t * PWCHAR
Definition: typedefs.h:56
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
Definition: wdfdevice.h:3281
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:215
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName
Definition: cmfuncs.h:64
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
Definition: exfuncs.h:274
* PFILE_OBJECT
Definition: iotypes.h:1998
#define ObDereferenceObject
Definition: obfuncs.h:203

◆ if() [1/2]

if ( !  NT_SUCCESSStatus)

Definition at line 67 of file xhcientry.cpp.

68 {
69 DPRINT1("WdfDriverCreate failed 0x%lx\n", Status);
70 return Status;
71 }
NTSTATUS Status
Definition: xhcientry.cpp:54

◆ if() [2/2]

if ( XhciDriver.  TestMode)

◆ XhciEvtDriverUnload()

VOID NTAPI XhciEvtDriverUnload ( _In_ WDFDRIVER  Driver)

Definition at line 86 of file xhcientry.cpp.

88{
90
91 UcxStubUnbindClass();
92}
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
_Must_inspect_result_ _In_ WDFDRIVER Driver
Definition: wdfcontrol.h:83

◆ XhciIsTestSigningOn()

static BOOLEAN NTAPI XhciIsTestSigningOn ( VOID  )
static

Definition at line 29 of file xhcientry.cpp.

30{
33
34 Info.Length = sizeof(Info);
35 Info.CodeIntegrityOptions = 0;
36
38 if (!NT_SUCCESS(Status))
39 return FALSE;
40
41 return (Info.CodeIntegrityOptions & XHCI_CODE_INTEGRITY_TESTSIGN) != 0;
42}
NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation(IN SYSTEM_INFORMATION_CLASS SystemInfoClass, OUT PVOID SystemInfoBuffer, IN ULONG SystemInfoBufferSize, OUT PULONG BytesReturned OPTIONAL)
@ SystemCodeIntegrityInformation
Definition: extypes.h:327
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
#define XHCI_CODE_INTEGRITY_TESTSIGN
Definition: xhcientry.cpp:15

Variable Documentation

◆ Config

Definition at line 53 of file xhcientry.cpp.

◆ DriverObject

Definition at line 56 of file xhcientry.cpp.

◆ DriverPoolTag

Config DriverPoolTag = XHCI_TAG_DRIVER

Definition at line 64 of file xhcientry.cpp.

◆ EvtDriverUnload

Config EvtDriverUnload = XhciEvtDriverUnload

Definition at line 63 of file xhcientry.cpp.

◆ n

test hooks enabled n

Definition at line 75 of file xhcientry.cpp.

◆ QueryDeviceFlags

Definition at line 60 of file xhcientry.cpp.

◆ RegistryPath

Initial value:
{
RtlInitUnicodeString & RoutineName
Definition: xhcientry.cpp:59

Definition at line 50 of file xhcientry.cpp.

◆ RoutineName

◆ Status

Definition at line 54 of file xhcientry.cpp.

Referenced by if(), and XhciIsTestSigningOn().

◆ TestMode

Definition at line 73 of file xhcientry.cpp.

◆ XhciDriver