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.
 
 
 
 
 
 

448 lines
9.8 KiB

/*++
Copyright (c) 1991 - 2001 Microsoft Corporation
Module Name:
#### ## # ###### ##### ##### ## # ### ## ## ##
## ### # ## ## ## ## ### # ### ## ## ##
## #### # ## ## ## ## #### # ## ## ## ## ##
## # #### ## ##### ##### # #### ## ## ## #######
## # ### ## ## #### # ### ####### ## ## ##
## # ## ## ## ## ## # ## ## ## ## ## ## ##
#### # # ## ##### ## ## # # ## ## ##### ## ## ##
Abstract:
This header contains all definitions that are internal
to the port driver.
Author:
Wesley Witt (wesw) 1-Oct-2001
Environment:
Kernel mode only.
Notes:
--*/
extern "C" {
#include <ntosp.h>
#include <zwapi.h>
#include <mountmgr.h>
#include <mountdev.h>
#include <ntddstor.h>
#include <ntdddisk.h>
#include <wdmsec.h>
#include <stdio.h>
}
#define MINIPORT_DEVICE_TYPE 0
#include "saport.h"
#pragma warning(error:4101) // Unreferenced local variable
#ifdef POOL_TAGGING
#ifdef ExAllocatePool
#undef ExAllocatePool
#endif
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'tpaS')
#endif
#define STRING_SZ(_str) (wcslen((PWSTR)_str)*sizeof(WCHAR))
#define ARRAY_SZ(_ary) (sizeof(_ary)/sizeof(_ary[0]))
#define SecToNano(_sec) (LONGLONG)((_sec) * 1000 * 1000 * 10)
#define NanoToSec(_nano) (ULONG)((_nano) / (1000 * 1000 * 10))
#define MARK_IRP_INTERNAL(_irp) (_irp)->Flags |= 0x80
#define IS_IRP_INTERNAL(_irp) (((_irp)->Flags & 0x80) > 0)
typedef struct _SAPORT_DRIVER_EXTENSION {
SAPORT_INITIALIZATION_DATA InitData;
PDRIVER_OBJECT DriverObject;
UNICODE_STRING RegistryPath;
} SAPORT_DRIVER_EXTENSION, *PSAPORT_DRIVER_EXTENSION;
//
// Device extension structures
//
#define DEVICE_EXTENSION_UNKNOWN (0)
#define DEVICE_EXTENSION_DISPLAY (1)
#define DEVICE_EXTENSION_KEYPAD (2)
#define DEVICE_EXTENSION_NVRAM (3)
#define DEVICE_EXTENSION_WATCHDOG (4)
typedef struct _DEVICE_EXTENSION {
ULONG DeviceExtensionType;
ULONG DeviceType;
PDEVICE_OBJECT DeviceObject;
PDRIVER_OBJECT DriverObject;
PDEVICE_OBJECT TargetObject;
PDEVICE_OBJECT Pdo;
LONG IsStarted;
LONG IsRemoved;
PVOID MiniPortDeviceExtension;
PSAPORT_INITIALIZATION_DATA InitData;
IO_REMOVE_LOCK RemoveLock;
PSAPORT_DRIVER_EXTENSION DriverExtension;
PKINTERRUPT InterruptObject;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
typedef struct _SAPORT_IOCONTEXT {
NTSTATUS Status;
PSA_IO_ROUTINE IoRoutine;
PUCHAR IoBuffer;
ULONG IoLength;
LONGLONG StartingOffset;
PVOID MiniPortDeviceExtension;
PIRP Irp;
} SAPORT_IOCONTEXT, *PSAPORT_IOCONTEXT;
typedef struct _SAPORT_FSCONTEXT {
ULONGLONG CurrentPosition;
} SAPORT_FSCONTEXT, *PSAPORT_FSCONTEXT;
PDEVICE_EXTENSION
FORCEINLINE
DeviceExtentionFromMiniPort(
IN PVOID MiniPortDeviceExtension
)
{
return (PDEVICE_EXTENSION)((PUCHAR)MiniPortDeviceExtension - *(PULONG)((PUCHAR)MiniPortDeviceExtension - sizeof(ULONG)));
}
//
// IOCTL processing
//
#define DECLARE_IOCTL_HANDLER(_NAME) \
NTSTATUS \
_NAME( \
IN PDEVICE_OBJECT DeviceObject, \
IN PIRP Irp, \
IN PDEVICE_EXTENSION DeviceExtension, \
IN PVOID InputBuffer, \
IN ULONG InputBufferLength, \
IN PVOID OutputBuffer, \
IN ULONG OutputBufferLength \
)
#define DO_DEFAULT() DefaultIoctlHandler( DeviceObject, Irp, DeviceExtension, InputBuffer, InputBufferLength, OutputBuffer, OutputBufferLength )
//
// IOCTL handler prototypes
//
DECLARE_IOCTL_HANDLER( DefaultIoctlHandler );
DECLARE_IOCTL_HANDLER( UnsupportedIoctlHandler );
DECLARE_IOCTL_HANDLER( HandleGetVersion );
DECLARE_IOCTL_HANDLER( HandleGetCaps );
DECLARE_IOCTL_HANDLER( HandleDisplayLock );
DECLARE_IOCTL_HANDLER( HandleDisplayUnlock );
DECLARE_IOCTL_HANDLER( HandleDisplayBusyMessage );
DECLARE_IOCTL_HANDLER( HandleDisplayShutdownMessage );
DECLARE_IOCTL_HANDLER( HandleDisplayChangeLanguage );
DECLARE_IOCTL_HANDLER( HandleWdDisable );
DECLARE_IOCTL_HANDLER( HandleWdQueryExpireBehavior );
DECLARE_IOCTL_HANDLER( HandleWdSetExpireBehavior );
DECLARE_IOCTL_HANDLER( HandleWdPing );
DECLARE_IOCTL_HANDLER( HandleWdQueryTimer );
DECLARE_IOCTL_HANDLER( HandleWdSetTimer );
DECLARE_IOCTL_HANDLER( HandleWdDelayBoot );
DECLARE_IOCTL_HANDLER( HandleNvramWriteBootCounter );
DECLARE_IOCTL_HANDLER( HandleNvramReadBootCounter );
DECLARE_IOCTL_HANDLER( HandleDisplayStoreBitmap );
//
// Miniport specific header files
//
#include "display.h"
#include "keypad.h"
#include "nvram.h"
#include "watchdog.h"
//
// OS Versioning Stuff
//
extern ULONG OsMajorVersion;
extern ULONG OsMinorVersion;
#define RunningOnWin2k (OsMajorVersion == 5 && OsMinorVersion == 0)
#define RunningOnWinXp (OsMajorVersion == 5 && OsMinorVersion == 1)
//
// Debug Stuff
//
#define ERROR_RETURN(_dt_,_msg_,_status_) \
{ \
REPORT_ERROR(_dt_,_msg_,_status_); \
__leave; \
}
#if DBG
PCHAR
PnPMinorFunctionString(
UCHAR MinorFunction
);
PCHAR
IoctlString(
ULONG IoControlCode
);
PCHAR
PowerMinorFunctionString(
UCHAR MinorFunction
);
PCHAR
PowerSystemStateString(
SYSTEM_POWER_STATE State
);
PCHAR
PowerDeviceStateString(
DEVICE_POWER_STATE State
);
PCHAR
PnPMinorFunctionString(
UCHAR MinorFunction
);
#endif
//
// prototypes
//
extern "C" {
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
VOID
SaPortStartIo(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortCreate(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortCleanup(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortClose(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortPnp(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortAddDevice(
IN PDRIVER_OBJECT DriverObject,
IN OUT PDEVICE_OBJECT PhysicalDeviceObject
);
NTSTATUS
SaPortPower(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortWrite(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortRead(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortDeviceControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortShutdown(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SaPortSystemControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
VOID
SaPortCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
} // extern "C"
//
// util.cpp
//
VOID
PrintDriverVersion(
IN ULONG DeviceType,
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS
CallLowerDriverAndWait(
IN PIRP Irp,
IN PDEVICE_OBJECT TargetObject
);
NTSTATUS
GetBootPartitionNumber(
OUT PULONG DiskNumber,
OUT PULONG PartitionNumber,
OUT PULONG AbsolutePartNumber
);
NTSTATUS
CompleteRequest(
PIRP Irp,
NTSTATUS Status,
ULONG_PTR OutputLength
);
NTSTATUS
ForwardRequest(
IN PIRP Irp,
IN PDEVICE_OBJECT TargetObject
);
NTSTATUS
CallMiniPortDriverReadWrite(
IN PDEVICE_EXTENSION DeviceExtension,
IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN WriteIo,
IN PVOID Buffer,
IN ULONG Length,
IN ULONG Offset
);
NTSTATUS
CallMiniPortDriverDeviceControl(
IN PDEVICE_EXTENSION DeviceExtension,
IN PDEVICE_OBJECT DeviceObject,
IN ULONG IoControlCode,
IN PVOID InputBuffer,
IN ULONG InputBufferLength,
OUT PVOID OutputBuffer,
IN ULONG OutputBufferLength
);
NTSTATUS
OpenParametersRegistryKey(
IN PSAPORT_DRIVER_EXTENSION DriverExtension,
IN PUNICODE_STRING RegistryPath,
IN ULONG AccessMode,
OUT PHANDLE RegistryHandle
);
NTSTATUS
CreateParametersRegistryKey(
IN PSAPORT_DRIVER_EXTENSION DriverExtension,
IN PUNICODE_STRING RegistryPath,
OUT PHANDLE parametersKey
);
NTSTATUS
ReadRegistryValue(
IN PSAPORT_DRIVER_EXTENSION DriverExtension,
IN PUNICODE_STRING RegistryPath,
IN PWSTR ValueName,
OUT PKEY_VALUE_FULL_INFORMATION *KeyInformation
);
NTSTATUS
WriteRegistryValue(
IN PSAPORT_DRIVER_EXTENSION DriverExtension,
IN PUNICODE_STRING RegistryPath,
IN PWSTR ValueName,
IN ULONG RegistryType,
IN PVOID RegistryValue,
IN ULONG RegistryValueLength
);
VOID
GetOsVersion(
VOID
);
//
// ******************************************
//
// From NTDDK.H
//
// ******************************************
//
extern "C" {
typedef
VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE)(
IN HANDLE ParentId,
IN HANDLE ProcessId,
IN BOOLEAN Create
);
NTSTATUS
PsSetCreateProcessNotifyRoutine(
IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
IN BOOLEAN Remove
);
BOOLEAN
PsGetVersion(
PULONG MajorVersion OPTIONAL,
PULONG MinorVersion OPTIONAL,
PULONG BuildNumber OPTIONAL,
PUNICODE_STRING CSDVersion OPTIONAL
);
}