|
|
/*++
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_ */
|