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.
 
 
 
 
 
 

123 lines
3.9 KiB

/*++
Copyright (c) 1991 - 2001 Microsoft Corporation
Module Name:
## # ## ## ##### ### ## ## ## ##
### # ## ## ## ## ### ### ### ## ##
#### # ## ## ## ## ## ## ######## ## ##
# #### #### ##### ## ## # ### ## #######
# ### #### #### ####### # # ## ## ##
# ## ## ## ## ## ## # ## ## ## ##
# # ## ## ## ## ## # ## ## ## ##
Abstract:
This header file contains all the global
definitions for the NVRAM device.
Author:
Wesley Witt (wesw) 1-Oct-2001
Environment:
Kernel mode only.
Notes:
--*/
/////////////////////////////////////////////////////////////////////
// By default we assume a power cycle has occurred if the driver
// has been down for more than DURATION_OF_POWERCYCLE milliseconds.
// In other words, the "initializing boot" is expected. This is
// determined if the driver shutdown timestamp is the latest
// timestamp. If the driver was never shut down (i.e., the last up
// timestamp is greater than the shutdown timestamp, then the duration
// is required to be more than two minutes to conclude that there
// was a power cycle. This is necessary to prevent falsly assuming
// a power cycle on repeated crashes, and hence potentially entering
// a cycle whereby an alternative OS is never switched over to.
//
// AAN: If we did get a shutdown IRP and we took a timestamp during shutdown
// (indicated by the fact that the shutdown timestamp is later than the last
// periodic timestamp) then we use DURATION_OF_POWERCYCLE interval to determine
// if power has cycled. If the shutdown timestamp wa snot taken (because we did
// not get a shutdown IRP) then we the DURATION_PWRCYCLE_NOSHUTDOWN interval.
// The periodic timestamps are taken at half the duration of DURATION_PWRCYCLE_NOSHUTDOWN
// interval.
#define DURATION_OF_POWERCYCLE (90*1000) // 90 seconds in milliseconds
#define DURATION_OF_POWERCYCLE_STRING (L"Duration Powercycle")
// four minutes in milliseconds
#define DURATION_PWRCYCLE_NOSHUTDOWN (4*60*1000)
#define DURATION_PWRCYCLE_NOSHUTDOWN_STRING (L"Duration PwrCycle NoShutDn")
//#define DURATION_PWRCYCLE_NOSHUTDOWN (10*1000) // test code, for fast testing
#define NVRAM_MAXIMUM_PARTITIONS 4
#define NVRAM_RESERVED_BOOTCOUNTER_SLOTS 4
#define NVRAM_RESERVED_DRIVER_SLOTS 8
#define NVRAM_MAX_RESERVED_SLOTS (NVRAM_RESERVED_BOOTCOUNTER_SLOTS + NVRAM_RESERVED_DRIVER_SLOTS)
//
// Device Extension
//
typedef struct _NVRAM_DEVICE_EXTENSION : _DEVICE_EXTENSION {
SA_NVRAM_CAPS DeviceCaps;
ULONG PrimaryOS;
LONGLONG LastStartupTime;
LONGLONG StartupInterval;
LONGLONG StartIntNoShutdown;
LONGLONG ShutdownTime;
LONGLONG LastUpTime;
BOOLEAN PowerCycleBoot;
ULONG SlotPowerCycle; // 1 slot
ULONG SlotShutDownTime; // 2 slots
ULONG SlotBootCounter; // 1 slot
PULONG NvramData;
} NVRAM_DEVICE_EXTENSION, *PNVRAM_DEVICE_EXTENSION;
NTSTATUS
SaNvramDetermineIfPowerCycled(
IN PNVRAM_DEVICE_EXTENSION DeviceExtension
);
NTSTATUS
SaNvramStartDevice(
IN PNVRAM_DEVICE_EXTENSION DeviceExtension
);
NTSTATUS
SaNvramDeviceInitialization(
IN PSAPORT_DRIVER_EXTENSION DriverExtension
);
NTSTATUS
SaNvramIoValidation(
IN PNVRAM_DEVICE_EXTENSION DeviceExtension,
IN PIRP Irp,
PIO_STACK_LOCATION IrpSp
);
NTSTATUS
SaNvramShutdownNotification(
IN PNVRAM_DEVICE_EXTENSION DeviceExtension,
IN PIRP Irp,
PIO_STACK_LOCATION IrpSp
);