Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

246 lines
5.5 KiB

#include "stdarg.h"
#include "stdio.h"
#include "stddef.h"
#include <ntddk.h>
#include <initguid.h>
#include "common.h"
//
// Include the biggie...
//
#include "wdmsec.h"
#define DEFAULT_EXTENSION_SIZE 0x100
#define DEFAULT_DEVICE_NAME L"\\Device\\IoCreateDeviceSecure"
#define DEFAULT_DEVICE_TYPE FILE_DEVICE_UNKNOWN
#define DEFAULT_DEVICE_CHARACTERISTICS FILE_DEVICE_SECURE_OPEN
//
// Log levels
//
#define SAMPLE_LEVEL_ERROR 0
#define SAMPLE_LEVEL_INFO 1
#define SAMPLE_LEVEL_VERBOSE 2
#define SAMPLE_DEFAULT_DEBUG_LEVEL 1
//
// Make it a global, so we can change it on the fly...
//
extern LONG g_DebugLevel;
#if DBG
#define SD_KdPrint(_l_, _x_) \
if (_l_ <= g_DebugLevel ) { \
DbgPrint ("WdmSecTest: "); \
DbgPrint _x_; \
}
#define TRAP() DbgBreakPoint()
#else
#define SD_KdPrint(_l_, _x_)
#define TRAP()
#endif
//
// A device extension for the device object
//
typedef struct _SD_FDO_DATA {
ULONG PdoSignature; // we use this do distinguish our FDO
// from the test PDOs we create
BOOLEAN IsStarted; // This flag is set when is started.
BOOLEAN IsRemoved; // This flag is set when the device
// is removed.
BOOLEAN HoldNewRequests; // This flag is set whenever the
// device needs to queue incoming
// requests (when it receives a
// QUERY_STOP or QUERY_REMOVE).
BOOLEAN IsLegacy ; // TRUE if the device is created
// using IoReportDetectedDevice
LIST_ENTRY NewRequestsQueue; // The queue where the incoming
// requests are queued when
// HoldNewRequests is set.
PDEVICE_OBJECT Self; // a back pointer to the DeviceObject.
PDEVICE_OBJECT PDO; // The PDO to which the FDO is attached.
PDEVICE_OBJECT NextLowerDriver; // The top of the device stack just
// beneath this device object.
KEVENT StartEvent; // an event to sync the start IRP.
KEVENT RemoveEvent; // an event to synch outstandIO to zero.
ULONG OutstandingIO; // 1 biased count of reasons why
// this object should stick around.
UNICODE_STRING DeviceInterfaceName; // The thing we need for the
// the user-modeto get a handle on
// us...
SYSTEM_POWER_STATE SystemPowerState; // The general power state
DEVICE_POWER_STATE DevicePowerState; // The power state of the device
PDRIVER_OBJECT DriverObject;
LIST_ENTRY PdoList;
KSPIN_LOCK Lock;
} SD_FDO_DATA, *PSD_FDO_DATA;
//
// The list of PDOs
//
typedef struct _PDO_ENTRY {
LIST_ENTRY Link;
PDEVICE_OBJECT Pdo;
} PDO_ENTRY, *PPDO_ENTRY;
//
// Globals
//
extern PDRIVER_OBJECT g_DriverObject;
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
) ;
NTSTATUS
SD_AddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
) ;
NTSTATUS
SD_Pass (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SD_DispatchPower (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SD_DispatchPnp (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SD_CreateClose (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SD_Ioctl (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SD_StartDevice (
IN PSD_FDO_DATA FdoData,
IN PIRP Irp
);
NTSTATUS
SD_DispatchPnpComplete (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
VOID
SD_Unload(
IN PDRIVER_OBJECT DriverObject
);
LONG
SD_IoIncrement (
IN PSD_FDO_DATA FdoData
) ;
LONG
SD_IoDecrement (
IN PSD_FDO_DATA FdoData
) ;
//
// Test (new) functions
//
NTSTATUS
WdmSecTestName (
IN PSD_FDO_DATA FdoData
);
NTSTATUS
WdmSecTestCreateWithGuid (
IN PSD_FDO_DATA FdoData,
IN OUT PWST_CREATE_WITH_GUID Create
);
NTSTATUS
WdmSecTestCreateNoGuid (
IN PSD_FDO_DATA FdoData,
IN OUT PWST_CREATE_NO_GUID Create
);
NTSTATUS
WdmSecTestCreateObject (
IN PSD_FDO_DATA FdoData,
IN OUT PWST_CREATE_OBJECT Data
);
NTSTATUS
WdmSecTestGetSecurity (
IN PSD_FDO_DATA FdoData,
IN OUT PWST_GET_SECURITY Data
);
NTSTATUS
WdmSecTestDestroyObject (
IN PSD_FDO_DATA FdoData,
IN OUT PWST_DESTROY_OBJECT Data
);