|
|
/*++
Copyright (c) 1991 - 2001 Microsoft Corporation
Module Name:
### ### ##### ##### ##### ###### ## ## ## # ### ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ##### ## ####### ### ####### ##### ## ## #### ## ## ## # ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## ## ##### ## ## ## ## ## ##
Abstract:
This header contains all definitions necessary for server availability miniport drivers.
Author:
Wesley Witt (wesw) 1-Oct-2001
Environment:
Kernel mode only.
Notes:
--*/
#include "saio.h"
#ifndef _SAPORT_ #define _SAPORT_
#ifdef _SADDK_ #define SAPORT_API DECLSPEC_IMPORT #else #define SAPORT_API #endif
#ifdef __cplusplus extern "C" { #endif
// // Callback function prototypes //
typedef NTSTATUS (*PSA_HW_INITIALIZE)( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID DeviceExtension, IN PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialResources, IN ULONG PartialResourceCount );
typedef NTSTATUS (*PSA_DEVICE_IOCTL)( IN PVOID DeviceExtension, IN PIRP Irp, IN PVOID FsContext, IN ULONG FunctionCode, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength );
typedef NTSTATUS (*PSA_IO_ROUTINE)( IN PVOID DeviceExtension, IN PIRP Irp, IN PVOID FsContext, IN LONGLONG StartingOffset, IN PVOID DataBuffer, IN ULONG DataBufferLength );
typedef NTSTATUS (*PSA_CREATECLOSE)( IN PVOID DeviceExtension, IN PIRP Irp, IN PVOID FsContext );
typedef VOID (*PSA_CANCEL)( IN PVOID DeviceExtension, IN PIRP Irp, IN BOOLEAN CurrentIo );
// // Server availability port driver initialization data structure //
typedef struct _SAPORT_INITIALIZATION_DATA { ULONG StructSize; // must be sizeof(STATUS_INVALID_PARAMETER) ULONG DeviceType; // must be one of the SA_DEVICE defines ULONG DeviceExtensionSize; // ULONG FileContextSize; // PSA_HW_INITIALIZE HwInitialize; // points you the device specific hardware init func PSA_CREATECLOSE CreateRoutine; // PSA_CREATECLOSE CloseRoutine; // PSA_DEVICE_IOCTL DeviceIoctl; // PSA_IO_ROUTINE Write; // PSA_IO_ROUTINE Read; // PSA_CANCEL CancelRoutine; // PKSERVICE_ROUTINE InterruptServiceRoutine; // PIO_DPC_ROUTINE IsrForDpcRoutine; // } SAPORT_INITIALIZATION_DATA, *PSAPORT_INITIALIZATION_DATA;
// // Debug Helpers //
#define SAPORT_DEBUG_ERROR_LEVEL 0x00000001 #define SAPORT_DEBUG_WARNING_LEVEL 0x00000002 #define SAPORT_DEBUG_TRACE_LEVEL 0x00000004 #define SAPORT_DEBUG_INFO_LEVEL 0x00000008
#if DBG #define DebugPrint(_X_) SaPortDebugPrint _X_ #else #define DebugPrint(_X_) #endif
#define REPORT_ERROR(_dt_,_msg_,_status_) \ DebugPrint(( _dt_, SAPORT_DEBUG_ERROR_LEVEL, "%s [0x%08x]: %s @ %d\n", _msg_, _status_, __FILE__, __LINE__ ))
#define KeAcquireMutex(_mutex_) KeWaitForMutexObject(_mutex_,Executive,KernelMode,TRUE,NULL)
// // Server availability functions exported by SAPORT.SYS //
SAPORT_API NTSTATUS SaPortInitialize( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath, IN PSAPORT_INITIALIZATION_DATA SaPortInitData );
SAPORT_API PVOID SaPortAllocatePool( IN PVOID MiniPortDeviceExtension, IN SIZE_T NumberOfBytes );
SAPORT_API VOID SaPortFreePool( IN PVOID DeviceExtension, IN PVOID P );
SAPORT_API PVOID SaPortGetVirtualAddress( IN PVOID MiniPortDeviceExtension, IN PHYSICAL_ADDRESS PhysicalAddress, IN ULONG Length );
SAPORT_API VOID SaPortRequestDpc( IN PVOID MiniPortDeviceExtension, IN PVOID Context );
SAPORT_API VOID SaPortCompleteRequest( IN PVOID MiniPortDeviceExtension, IN PIRP Irp, IN ULONG Information, IN NTSTATUS Status, IN BOOLEAN CompleteAll );
VOID SaPortDebugPrint( ULONG DeviceType, ULONG DebugLevel, PSTR DebugMessage, ... );
NTSTATUS SaPortGetRegistryValueInformation( IN PVOID MiniPortDeviceExtension, IN PWSTR ValueName, IN OUT PULONG RegistryType, IN OUT PULONG RegistryDataLength );
NTSTATUS SaPortDeleteRegistryValue( IN PVOID MiniPortDeviceExtension, IN PWSTR ValueName );
NTSTATUS SaPortReadNumericRegistryValue( IN PVOID MiniPortDeviceExtension, IN PWSTR ValueName, OUT PULONG RegistryValue );
NTSTATUS SaPortReadUnicodeStringRegistryValue( IN PVOID MiniPortDeviceExtension, IN PWSTR ValueName, OUT PUNICODE_STRING RegistryValue );
NTSTATUS SaPortReadBinaryRegistryValue( IN PVOID MiniPortDeviceExtension, IN PWSTR ValueName, OUT PVOID RegistryValue, IN OUT PULONG RegistryValueLength );
NTSTATUS SaPortWriteUnicodeStringRegistryValue( IN PVOID MiniPortDeviceExtension, IN PWSTR ValueName, IN PUNICODE_STRING RegistryValue );
NTSTATUS SaPortWriteBinaryRegistryValue( IN PVOID MiniPortDeviceExtension, IN PWSTR ValueName, IN PVOID RegistryValue, IN ULONG RegistryValueLength );
NTSTATUS SaPortWriteNumericRegistryValue( IN PVOID MiniPortDeviceExtension, IN PWSTR ValueName, IN ULONG RegistryValue );
ULONG SaPortGetOsVersion( VOID );
BOOLEAN SaPortSynchronizeExecution ( IN PVOID MiniPortDeviceExtension, IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, IN PVOID SynchronizeContext );
PVOID SaPortLockPagesForSystem( IN PVOID MiniPortDeviceExtension, IN PVOID UserBuffer, IN ULONG UserBufferLength, IN OUT PMDL *Mdl );
VOID SaPortReleaseLockedPagesForSystem( IN PVOID MiniPortDeviceExtension, IN PMDL Mdl );
NTSTATUS SaPortCopyUnicodeString( IN PVOID MiniPortDeviceExtension, PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString );
NTSTATUS SaPortCreateUnicodeString( IN PVOID MiniPortDeviceExtension, PUNICODE_STRING DestinationString, PWSTR SourceString );
NTSTATUS SaPortCreateUnicodeStringCat( IN PVOID MiniPortDeviceExtension, PUNICODE_STRING DestinationString, PWSTR SourceString1, PWSTR SourceString2 );
VOID SaPortFreeUnicodeString( IN PVOID MiniPortDeviceExtension, PUNICODE_STRING SourceString );
NTSTATUS SaPortCreateBasenamedEvent( IN PVOID MiniPortDeviceExtension, IN PWSTR EventNameString, IN OUT PKEVENT *Event, IN OUT PHANDLE EventHandle );
NTSTATUS SaPortCreateThread( IN PVOID MiniPortDeviceExtension, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext, IN OUT PVOID *ThreadObject );
NTSTATUS SaPortShutdownSystem( IN BOOLEAN PowerOff );
#ifdef __cplusplus } #endif
#endif /* _SAPORT_ */
|