ReactOS  0.4.15-dev-1384-g878186b
batclass.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _BATTERY_QUERY_INFORMATION
 
struct  _BATTERY_INFORMATION
 
struct  _BATTERY_MANUFACTURE_DATE
 
struct  _BATTERY_SET_INFORMATION
 
struct  _BATTERY_WAIT_STATUS
 
struct  _BATTERY_STATUS
 
struct  _BATTERY_NOTIFY
 
struct  _BATTERY_MINIPORT_INFO
 
struct  _BATTERY_WMI_STATUS
 
struct  _BATTERY_WMI_RUNTIME
 
struct  _BATTERY_WMI_TEMPERATURE
 
struct  _BATTERY_WMI_FULL_CHARGED_CAPACITY
 
struct  _BATTERY_WMI_CYCLE_COUNT
 
struct  _BATTERY_WMI_STATIC_DATA
 
struct  _BATTERY_WMI_STATUS_CHANGE
 
struct  _BATTERY_TAG_CHANGE
 

Macros

#define _BATCLASS_
 
#define BATTERY_SET_CHARGE_SUPPORTED   0x00000001
 
#define BATTERY_SET_DISCHARGE_SUPPORTED   0x00000002
 
#define BATTERY_SET_RESUME_SUPPORTED   0x00000004
 
#define BATTERY_IS_SHORT_TERM   0x20000000
 
#define BATTERY_CAPACITY_RELATIVE   0x40000000
 
#define BATTERY_SYSTEM_BATTERY   0x80000000
 
#define BATTERY_UNKNOWN_CAPACITY   0xFFFFFFFF
 
#define BATTERY_UNKNOWN_TIME   0x80000000
 
#define MAX_BATTERY_STRING_SIZE   128
 
#define BATTERY_POWER_ON_LINE   0x00000001
 
#define BATTERY_DISCHARGING   0x00000002
 
#define BATTERY_CHARGING   0x00000004
 
#define BATTERY_CRITICAL   0x00000008
 
#define BATTERY_UNKNOWN_VOLTAGE   0xFFFFFFFF
 
#define BATTERY_UNKNOWN_RATE   0x80000000
 
#define IOCTL_BATTERY_QUERY_TAG   CTL_CODE(FILE_DEVICE_BATTERY, 0x10, METHOD_BUFFERED, FILE_READ_ACCESS)
 
#define IOCTL_BATTERY_QUERY_INFORMATION   CTL_CODE(FILE_DEVICE_BATTERY, 0x11, METHOD_BUFFERED, FILE_READ_ACCESS)
 
#define IOCTL_BATTERY_SET_INFORMATION   CTL_CODE(FILE_DEVICE_BATTERY, 0x12, METHOD_BUFFERED, FILE_WRITE_ACCESS)
 
#define IOCTL_BATTERY_QUERY_STATUS   CTL_CODE(FILE_DEVICE_BATTERY, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS)
 
#define BATTERY_TAG_INVALID   0
 
#define BATTERY_CLASS_MAJOR_VERSION   0x0001
 
#define BATTERY_CLASS_MINOR_VERSION   0x0000
 
#define BCLASSAPI   DECLSPEC_IMPORT
 

Typedefs

typedef enum _BATTERY_QUERY_INFORMATION_LEVEL BATTERY_QUERY_INFORMATION_LEVEL
 
typedef struct _BATTERY_QUERY_INFORMATION BATTERY_QUERY_INFORMATION
 
typedef struct _BATTERY_QUERY_INFORMATIONPBATTERY_QUERY_INFORMATION
 
typedef struct _BATTERY_INFORMATION BATTERY_INFORMATION
 
typedef struct _BATTERY_INFORMATIONPBATTERY_INFORMATION
 
typedef struct _BATTERY_MANUFACTURE_DATE BATTERY_MANUFACTURE_DATE
 
typedef struct _BATTERY_MANUFACTURE_DATEPBATTERY_MANUFACTURE_DATE
 
typedef enum _BATTERY_SET_INFORMATION_LEVEL BATTERY_SET_INFORMATION_LEVEL
 
typedef struct _BATTERY_SET_INFORMATION BATTERY_SET_INFORMATION
 
typedef struct _BATTERY_SET_INFORMATIONPBATTERY_SET_INFORMATION
 
typedef struct _BATTERY_WAIT_STATUS BATTERY_WAIT_STATUS
 
typedef struct _BATTERY_WAIT_STATUSPBATTERY_WAIT_STATUS
 
typedef struct _BATTERY_STATUS BATTERY_STATUS
 
typedef struct _BATTERY_STATUSPBATTERY_STATUS
 
typedef BCLASS_QUERY_TAG_CALLBACK * PBCLASS_QUERY_TAG_CALLBACK
 
typedef BCLASS_QUERY_INFORMATION_CALLBACK * PBCLASS_QUERY_INFORMATION_CALLBACK
 
typedef BCLASS_QUERY_STATUS_CALLBACK * PBCLASS_QUERY_STATUS_CALLBACK
 
typedef struct _BATTERY_NOTIFY BATTERY_NOTIFY
 
typedef struct _BATTERY_NOTIFYPBATTERY_NOTIFY
 
typedef BCLASS_SET_STATUS_NOTIFY_CALLBACK * PBCLASS_SET_STATUS_NOTIFY_CALLBACK
 
typedef BCLASS_SET_INFORMATION_CALLBACK * PBCLASS_SET_INFORMATION_CALLBACK
 
typedef BCLASS_DISABLE_STATUS_NOTIFY_CALLBACK * PBCLASS_DISABLE_STATUS_NOTIFY_CALLBACK
 
typedef PBCLASS_QUERY_TAG_CALLBACK BCLASS_QUERY_TAG
 
typedef PBCLASS_QUERY_INFORMATION_CALLBACK BCLASS_QUERY_INFORMATION
 
typedef PBCLASS_QUERY_STATUS_CALLBACK BCLASS_QUERY_STATUS
 
typedef PBCLASS_SET_STATUS_NOTIFY_CALLBACK BCLASS_SET_STATUS_NOTIFY
 
typedef PBCLASS_SET_INFORMATION_CALLBACK BCLASS_SET_INFORMATION
 
typedef PBCLASS_DISABLE_STATUS_NOTIFY_CALLBACK BCLASS_DISABLE_STATUS_NOTIFY
 
typedef struct _BATTERY_MINIPORT_INFO BATTERY_MINIPORT_INFO
 
typedef struct _BATTERY_MINIPORT_INFOPBATTERY_MINIPORT_INFO
 
typedef struct _BATTERY_WMI_STATUS BATTERY_WMI_STATUS
 
typedef struct _BATTERY_WMI_STATUSPBATTERY_WMI_STATUS
 
typedef struct _BATTERY_WMI_RUNTIME BATTERY_WMI_RUNTIME
 
typedef struct _BATTERY_WMI_RUNTIMEPBATTERY_WMI_RUNTIME
 
typedef struct _BATTERY_WMI_TEMPERATURE BATTERY_WMI_TEMPERATURE
 
typedef struct _BATTERY_WMI_TEMPERATUREPBATTERY_WMI_TEMPERATURE
 
typedef struct _BATTERY_WMI_FULL_CHARGED_CAPACITY BATTERY_WMI_FULL_CHARGED_CAPACITY
 
typedef struct _BATTERY_WMI_FULL_CHARGED_CAPACITYPBATTERY_WMI_FULL_CHARGED_CAPACITY
 
typedef struct _BATTERY_WMI_CYCLE_COUNT BATTERY_WMI_CYCLE_COUNT
 
typedef struct _BATTERY_WMI_CYCLE_COUNTPBATTERY_WMI_CYCLE_COUNT
 
typedef struct _BATTERY_WMI_STATIC_DATA BATTERY_WMI_STATIC_DATA
 
typedef struct _BATTERY_WMI_STATIC_DATAPBATTERY_WMI_STATIC_DATA
 
typedef struct _BATTERY_WMI_STATUS_CHANGE BATTERY_WMI_STATUS_CHANGE
 
typedef struct _BATTERY_WMI_STATUS_CHANGEPBATTERY_WMI_STATUS_CHANGE
 
typedef struct _BATTERY_TAG_CHANGE BATTERY_TAG_CHANGE
 
typedef struct _BATTERY_TAG_CHANGEPBATTERY_TAG_CHANGE
 

Enumerations

enum  _BATTERY_QUERY_INFORMATION_LEVEL {
  BatteryInformation = 0, BatteryGranularityInformation, BatteryTemperature, BatteryEstimatedTime,
  BatteryDeviceName, BatteryManufactureDate, BatteryManufactureName, BatteryUniqueID,
  BatterySerialNumber
}
 
enum  _BATTERY_SET_INFORMATION_LEVEL { BatteryCriticalBias = 0, BatteryCharge, BatteryDischarge }
 

Functions

 DEFINE_GUID (GUID_DEVICE_BATTERY, 0x72631e54L, 0x78A4, 0x11d0, 0xbc, 0xf7, 0x00, 0xaa, 0x00, 0xb7, 0xb3, 0x2a)
 
 DEFINE_GUID (BATTERY_STATUS_WMI_GUID, 0xfc4670d1, 0xebbf, 0x416e, 0x87, 0xce, 0x37, 0x4a, 0x4e, 0xbc, 0x11, 0x1a)
 
 DEFINE_GUID (BATTERY_RUNTIME_WMI_GUID, 0x535a3767, 0x1ac2, 0x49bc, 0xa0, 0x77, 0x3f, 0x7a, 0x02, 0xe4, 0x0a, 0xec)
 
 DEFINE_GUID (BATTERY_TEMPERATURE_WMI_GUID, 0x1a52a14d, 0xadce, 0x4a44, 0x9a, 0x3e, 0xc8, 0xd8, 0xf1, 0x5f, 0xf2, 0xc2)
 
 DEFINE_GUID (BATTERY_FULL_CHARGED_CAPACITY_WMI_GUID, 0x40b40565, 0x96f7, 0x4435, 0x86, 0x94, 0x97, 0xe0, 0xe4, 0x39, 0x59, 0x05)
 
 DEFINE_GUID (BATTERY_CYCLE_COUNT_WMI_GUID, 0xef98db24, 0x0014, 0x4c25, 0xa5, 0x0b, 0xc7, 0x24, 0xae, 0x5c, 0xd3, 0x71)
 
 DEFINE_GUID (BATTERY_STATIC_DATA_WMI_GUID, 0x05e1e463, 0xe4e2, 0x4ea9, 0x80, 0xcb, 0x9b, 0xd4, 0xb3, 0xca, 0x06, 0x55)
 
 DEFINE_GUID (BATTERY_STATUS_CHANGE_WMI_GUID, 0xcddfa0c3, 0x7c5b, 0x4e43, 0xa0, 0x34, 0x05, 0x9f, 0xa5, 0xb8, 0x43, 0x64)
 
 DEFINE_GUID (BATTERY_TAG_CHANGE_WMI_GUID, 0x5e1f6e19, 0x8786, 0x4d23, 0x94, 0xfc, 0x9e, 0x74, 0x6b, 0xd5, 0xd8, 0x88)
 
 _Function_class_ (BCLASS_QUERY_TAG_CALLBACK) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) _Check_return_ typedef NTSTATUS(NTAPI BCLASS_QUERY_TAG_CALLBACK)(_In_ PVOID Context
 
 _Function_class_ (BCLASS_QUERY_INFORMATION_CALLBACK) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) _Check_return_ typedef NTSTATUS(NTAPI BCLASS_QUERY_INFORMATION_CALLBACK)(_In_ PVOID Context
 
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _Out_writes_bytes_to_ (BufferLength, *ReturnedLength) PVOID Buffer
 
 _Function_class_ (BCLASS_QUERY_STATUS_CALLBACK) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) _Check_return_ typedef NTSTATUS(NTAPI BCLASS_QUERY_STATUS_CALLBACK)(_In_ PVOID Context
 
 _Function_class_ (BCLASS_SET_STATUS_NOTIFY_CALLBACK) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) _Check_return_ typedef NTSTATUS(NTAPI BCLASS_SET_STATUS_NOTIFY_CALLBACK)(_In_ PVOID Context
 
 _Function_class_ (BCLASS_SET_INFORMATION_CALLBACK) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) _Check_return_ typedef NTSTATUS(NTAPI BCLASS_SET_INFORMATION_CALLBACK)(_In_ PVOID Context
 
 _Function_class_ (BCLASS_DISABLE_STATUS_NOTIFY_CALLBACK) _IRQL_requires_same_ _IRQL_requires_max_(PASSIVE_LEVEL) _Check_return_ typedef NTSTATUS(NTAPI BCLASS_DISABLE_STATUS_NOTIFY_CALLBACK)(_In_ PVOID Context)
 
 _IRQL_requires_max_ (PASSIVE_LEVEL) _Check_return_ BCLASSAPI NTSTATUS NTAPI BatteryClassInitializeDevice(_In_ PBATTERY_MINIPORT_INFO MiniportInfo
 
 _IRQL_requires_max_ (DISPATCH_LEVEL) BCLASSAPI NTSTATUS NTAPI BatteryClassStatusNotify(_In_ PVOID ClassData)
 
_Inout_ PDEVICE_OBJECT _Inout_ PIRP _In_ ULONG _Out_writes_ (1) PULONG InstanceLengthArray
 
_Inout_ PDEVICE_OBJECT _Inout_ PIRP _In_ ULONG _In_ ULONG _Out_writes_bytes_opt_ (OutBufferSize) PUCHAR Buffer)
 

Variables

_Out_ PULONG BatteryTag
 
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL Level
 
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG AtRate
 
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _In_ ULONG BufferLength
 
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _In_ ULONG _Out_ PULONG ReturnedLength
 
_In_ ULONG _Out_ PBATTERY_STATUS BatteryStatus
 
_In_ ULONG _In_ PBATTERY_NOTIFY BatteryNotify
 
_In_ ULONG _In_ BATTERY_SET_INFORMATION_LEVEL _In_opt_ PVOID Buffer
 
_Out_ PVOIDClassData
 
_Inout_ PIRP Irp
 
_Inout_ PDEVICE_OBJECT DeviceObject
 
_Inout_ PDEVICE_OBJECT _Inout_ PIRP _In_ ULONG GuidIndex
 
_Inout_ PDEVICE_OBJECT _Inout_ PIRP _In_ ULONG _In_ ULONG OutBufferSize
 
_In_ PVOID WmiLibContext
 
_In_ PVOID _In_ PDEVICE_OBJECT _Inout_ PIRP _Out_ PVOID Disposition
 

Macro Definition Documentation

◆ _BATCLASS_

#define _BATCLASS_

Definition at line 54 of file batclass.h.

◆ BATTERY_CAPACITY_RELATIVE

#define BATTERY_CAPACITY_RELATIVE   0x40000000

Definition at line 61 of file batclass.h.

◆ BATTERY_CHARGING

#define BATTERY_CHARGING   0x00000004

Definition at line 75 of file batclass.h.

◆ BATTERY_CLASS_MAJOR_VERSION

#define BATTERY_CLASS_MAJOR_VERSION   0x0001

Definition at line 163 of file batclass.h.

◆ BATTERY_CLASS_MINOR_VERSION

#define BATTERY_CLASS_MINOR_VERSION   0x0000

Definition at line 164 of file batclass.h.

◆ BATTERY_CRITICAL

#define BATTERY_CRITICAL   0x00000008

Definition at line 76 of file batclass.h.

◆ BATTERY_DISCHARGING

#define BATTERY_DISCHARGING   0x00000002

Definition at line 74 of file batclass.h.

◆ BATTERY_IS_SHORT_TERM

#define BATTERY_IS_SHORT_TERM   0x20000000

Definition at line 60 of file batclass.h.

◆ BATTERY_POWER_ON_LINE

#define BATTERY_POWER_ON_LINE   0x00000001

Definition at line 73 of file batclass.h.

◆ BATTERY_SET_CHARGE_SUPPORTED

#define BATTERY_SET_CHARGE_SUPPORTED   0x00000001

Definition at line 57 of file batclass.h.

◆ BATTERY_SET_DISCHARGE_SUPPORTED

#define BATTERY_SET_DISCHARGE_SUPPORTED   0x00000002

Definition at line 58 of file batclass.h.

◆ BATTERY_SET_RESUME_SUPPORTED

#define BATTERY_SET_RESUME_SUPPORTED   0x00000004

Definition at line 59 of file batclass.h.

◆ BATTERY_SYSTEM_BATTERY

#define BATTERY_SYSTEM_BATTERY   0x80000000

Definition at line 62 of file batclass.h.

◆ BATTERY_TAG_INVALID

#define BATTERY_TAG_INVALID   0

Definition at line 94 of file batclass.h.

◆ BATTERY_UNKNOWN_CAPACITY

#define BATTERY_UNKNOWN_CAPACITY   0xFFFFFFFF

Definition at line 65 of file batclass.h.

◆ BATTERY_UNKNOWN_RATE

#define BATTERY_UNKNOWN_RATE   0x80000000

Definition at line 82 of file batclass.h.

◆ BATTERY_UNKNOWN_TIME

#define BATTERY_UNKNOWN_TIME   0x80000000

Definition at line 68 of file batclass.h.

◆ BATTERY_UNKNOWN_VOLTAGE

#define BATTERY_UNKNOWN_VOLTAGE   0xFFFFFFFF

Definition at line 79 of file batclass.h.

◆ BCLASSAPI

#define BCLASSAPI   DECLSPEC_IMPORT

Definition at line 326 of file batclass.h.

◆ IOCTL_BATTERY_QUERY_INFORMATION

#define IOCTL_BATTERY_QUERY_INFORMATION   CTL_CODE(FILE_DEVICE_BATTERY, 0x11, METHOD_BUFFERED, FILE_READ_ACCESS)

Definition at line 86 of file batclass.h.

◆ IOCTL_BATTERY_QUERY_STATUS

#define IOCTL_BATTERY_QUERY_STATUS   CTL_CODE(FILE_DEVICE_BATTERY, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS)

Definition at line 90 of file batclass.h.

◆ IOCTL_BATTERY_QUERY_TAG

#define IOCTL_BATTERY_QUERY_TAG   CTL_CODE(FILE_DEVICE_BATTERY, 0x10, METHOD_BUFFERED, FILE_READ_ACCESS)

Definition at line 84 of file batclass.h.

◆ IOCTL_BATTERY_SET_INFORMATION

#define IOCTL_BATTERY_SET_INFORMATION   CTL_CODE(FILE_DEVICE_BATTERY, 0x12, METHOD_BUFFERED, FILE_WRITE_ACCESS)

Definition at line 88 of file batclass.h.

◆ MAX_BATTERY_STRING_SIZE

#define MAX_BATTERY_STRING_SIZE   128

Definition at line 70 of file batclass.h.

Typedef Documentation

◆ BATTERY_INFORMATION

◆ BATTERY_MANUFACTURE_DATE

◆ BATTERY_MINIPORT_INFO

◆ BATTERY_NOTIFY

◆ BATTERY_QUERY_INFORMATION

◆ BATTERY_QUERY_INFORMATION_LEVEL

◆ BATTERY_SET_INFORMATION

◆ BATTERY_SET_INFORMATION_LEVEL

◆ BATTERY_STATUS

◆ BATTERY_TAG_CHANGE

◆ BATTERY_WAIT_STATUS

◆ BATTERY_WMI_CYCLE_COUNT

◆ BATTERY_WMI_FULL_CHARGED_CAPACITY

◆ BATTERY_WMI_RUNTIME

◆ BATTERY_WMI_STATIC_DATA

◆ BATTERY_WMI_STATUS

◆ BATTERY_WMI_STATUS_CHANGE

◆ BATTERY_WMI_TEMPERATURE

◆ BCLASS_DISABLE_STATUS_NOTIFY

◆ BCLASS_QUERY_INFORMATION

◆ BCLASS_QUERY_STATUS

Definition at line 242 of file batclass.h.

◆ BCLASS_QUERY_TAG

Definition at line 240 of file batclass.h.

◆ BCLASS_SET_INFORMATION

◆ BCLASS_SET_STATUS_NOTIFY

◆ PBATTERY_INFORMATION

◆ PBATTERY_MANUFACTURE_DATE

◆ PBATTERY_MINIPORT_INFO

◆ PBATTERY_NOTIFY

◆ PBATTERY_QUERY_INFORMATION

◆ PBATTERY_SET_INFORMATION

◆ PBATTERY_STATUS

◆ PBATTERY_TAG_CHANGE

◆ PBATTERY_WAIT_STATUS

◆ PBATTERY_WMI_CYCLE_COUNT

◆ PBATTERY_WMI_FULL_CHARGED_CAPACITY

◆ PBATTERY_WMI_RUNTIME

◆ PBATTERY_WMI_STATIC_DATA

◆ PBATTERY_WMI_STATUS

◆ PBATTERY_WMI_STATUS_CHANGE

◆ PBATTERY_WMI_TEMPERATURE

◆ PBCLASS_DISABLE_STATUS_NOTIFY_CALLBACK

typedef BCLASS_DISABLE_STATUS_NOTIFY_CALLBACK* PBCLASS_DISABLE_STATUS_NOTIFY_CALLBACK

Definition at line 238 of file batclass.h.

◆ PBCLASS_QUERY_INFORMATION_CALLBACK

typedef BCLASS_QUERY_INFORMATION_CALLBACK* PBCLASS_QUERY_INFORMATION_CALLBACK

Definition at line 189 of file batclass.h.

◆ PBCLASS_QUERY_STATUS_CALLBACK

typedef BCLASS_QUERY_STATUS_CALLBACK* PBCLASS_QUERY_STATUS_CALLBACK

Definition at line 200 of file batclass.h.

◆ PBCLASS_QUERY_TAG_CALLBACK

typedef BCLASS_QUERY_TAG_CALLBACK* PBCLASS_QUERY_TAG_CALLBACK

Definition at line 174 of file batclass.h.

◆ PBCLASS_SET_INFORMATION_CALLBACK

typedef BCLASS_SET_INFORMATION_CALLBACK* PBCLASS_SET_INFORMATION_CALLBACK

Definition at line 229 of file batclass.h.

◆ PBCLASS_SET_STATUS_NOTIFY_CALLBACK

typedef BCLASS_SET_STATUS_NOTIFY_CALLBACK* PBCLASS_SET_STATUS_NOTIFY_CALLBACK

Definition at line 217 of file batclass.h.

Enumeration Type Documentation

◆ _BATTERY_QUERY_INFORMATION_LEVEL

Enumerator
BatteryInformation 
BatteryGranularityInformation 
BatteryTemperature 
BatteryEstimatedTime 
BatteryDeviceName 
BatteryManufactureDate 
BatteryManufactureName 
BatteryUniqueID 
BatterySerialNumber 

Definition at line 96 of file batclass.h.

◆ _BATTERY_SET_INFORMATION_LEVEL

Enumerator
BatteryCriticalBias 
BatteryCharge 
BatteryDischarge 

Definition at line 133 of file batclass.h.

133  {
enum _BATTERY_SET_INFORMATION_LEVEL BATTERY_SET_INFORMATION_LEVEL

Function Documentation

◆ _Function_class_() [1/6]

_Function_class_ ( BCLASS_QUERY_TAG_CALLBACK  )

◆ _Function_class_() [2/6]

_Function_class_ ( BCLASS_QUERY_INFORMATION_CALLBACK  )

◆ _Function_class_() [3/6]

_Function_class_ ( BCLASS_QUERY_STATUS_CALLBACK  )

◆ _Function_class_() [4/6]

_Function_class_ ( BCLASS_SET_STATUS_NOTIFY_CALLBACK  )

◆ _Function_class_() [5/6]

_Function_class_ ( BCLASS_SET_INFORMATION_CALLBACK  )

◆ _Function_class_() [6/6]

_Function_class_ ( BCLASS_DISABLE_STATUS_NOTIFY_CALLBACK  )

◆ _IRQL_requires_max_() [1/2]

_IRQL_requires_max_ ( PASSIVE_LEVEL  )

Definition at line 64 of file Messaging.c.

75 {
76  PFLT_SERVER_PORT_OBJECT PortObject;
78 
79  /* The caller must allow at least one connection */
80  if (MaxConnections == 0)
81  {
83  }
84 
85  /* The request must be for a kernel handle */
86  if (!(ObjectAttributes->Attributes & OBJ_KERNEL_HANDLE))
87  {
89  }
90 
91  /*
92  * Get rundown protection on the target to stop the owner
93  * from unloading whilst this port object is open. It gets
94  * removed in the FltpServerPortClose callback
95  */
97  if (!NT_SUCCESS(Status))
98  {
99  return Status;
100  }
101 
102  /* Create the server port object for this filter */
106  KernelMode,
107  NULL,
108  sizeof(FLT_SERVER_PORT_OBJECT),
109  0,
110  0,
111  (PVOID *)&PortObject);
112  if (NT_SUCCESS(Status))
113  {
114  /* Zero out the struct */
115  RtlZeroMemory(PortObject, sizeof(FLT_SERVER_PORT_OBJECT));
116 
117  /* Increment the ref count on the target filter */
119 
120  /* Setup the filter port object */
121  PortObject->Filter = Filter;
122  PortObject->ConnectNotify = ConnectNotifyCallback;
124  PortObject->MessageNotify = MessageNotifyCallback;
125  PortObject->Cookie = ServerPortCookie;
126  PortObject->MaxConnections = MaxConnections;
127 
128  /* Insert the object */
129  Status = ObInsertObject(PortObject,
130  NULL,
132  0,
133  NULL,
135  if (NT_SUCCESS(Status))
136  {
137  /* Lock the connection list */
139 
140  /* Add the new port object to the connection list and increment the count */
143 
144  /* Unlock the connection list*/
146  }
147  }
148 
149  if (!NT_SUCCESS(Status))
150  {
151  /* Allow the filter to be cleaned up */
153  }
154 
155  return Status;
156 }
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_Must_inspect_result_ _Outptr_ PFLT_PORT * ServerPort
Definition: fltkernel.h:1873
PFLT_CONNECT_NOTIFY ConnectNotify
Definition: fltmgrint.h:191
VOID FLTAPI FltObjectDereference(_Inout_ PVOID Object)
Definition: Object.c:53
LONG NTSTATUS
Definition: precomp.h:26
#define InsertTailList(ListHead, Entry)
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
VOID FASTCALL ExReleaseFastMutex(IN PFAST_MUTEX FastMutex)
Definition: fmutex.c:31
ULONG FltpObjectPointerReference(_In_ PFLT_OBJECT Object)
Definition: Object.c:322
LIST_ENTRY mList
Definition: fltmgrint.h:56
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1802
#define FILE_READ_DATA
Definition: nt_native.h:628
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
Definition: oblife.c:952
Status
Definition: gdiplustypes.h:24
POBJECT_TYPE ServerPortObjectType
Definition: Messaging.c:24
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
_Must_inspect_result_ _Outptr_ PFLT_PORT _In_ POBJECT_ATTRIBUTES _In_opt_ PVOID _In_ PFLT_CONNECT_NOTIFY _In_ PFLT_DISCONNECT_NOTIFY DisconnectNotifyCallback
Definition: fltkernel.h:1873
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:454
_Must_inspect_result_ _Outptr_ PFLT_PORT _In_ POBJECT_ATTRIBUTES _In_opt_ PVOID _In_ PFLT_CONNECT_NOTIFY ConnectNotifyCallback
Definition: fltkernel.h:1873
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
Definition: obhandle.c:2932
#define STANDARD_RIGHTS_ALL
Definition: nt_native.h:69
VOID FASTCALL ExAcquireFastMutex(IN PFAST_MUTEX FastMutex)
Definition: fmutex.c:23
NTSTATUS FLTAPI FltObjectReference(_Inout_ PVOID Object)
Definition: Object.c:41
_Must_inspect_result_ _Outptr_ PFLT_PORT _In_ POBJECT_ATTRIBUTES _In_opt_ PVOID ServerPortCookie
Definition: fltkernel.h:1873
#define NULL
Definition: types.h:112
FAST_MUTEX mLock
Definition: fltmgrint.h:55
PFLT_MESSAGE_NOTIFY MessageNotify
Definition: fltmgrint.h:193
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
_Must_inspect_result_ _Outptr_ PFLT_PORT _In_ POBJECT_ATTRIBUTES _In_opt_ PVOID _In_ PFLT_CONNECT_NOTIFY _In_ PFLT_DISCONNECT_NOTIFY _In_opt_ PFLT_MESSAGE_NOTIFY _In_ LONG MaxConnections
Definition: fltkernel.h:1873
PFLT_DISCONNECT_NOTIFY DisconnectNotify
Definition: fltmgrint.h:192
_Must_inspect_result_ _Outptr_ PFLT_PORT _In_ POBJECT_ATTRIBUTES _In_opt_ PVOID _In_ PFLT_CONNECT_NOTIFY _In_ PFLT_DISCONNECT_NOTIFY _In_opt_ PFLT_MESSAGE_NOTIFY MessageNotifyCallback
Definition: fltkernel.h:1873
FLT_MUTEX_LIST_HEAD ConnectionList
Definition: fltmgrint.h:121

◆ _IRQL_requires_max_() [2/2]

_IRQL_requires_max_ ( DISPATCH_LEVEL  )

Definition at line 3557 of file common.c.

3587 {
3588  NTSTATUS status;
3589  BOOLEAN requestSent = FALSE;
3590 
3591  BOOLEAN shouldRetry = TRUE;
3592  PCDB cdb = (PCDB)DeviceExtension->PowerContext.Srb.Cdb;
3593  ULONG timeoutValue = DeviceExtension->TimeOutValue;
3594  ULONG retryCount = 1;
3595 
3596  // reset some fields.
3597  DeviceExtension->PowerContext.RetryIntervalIn100ns = 0;
3598  status = PowerContextReuseRequest(DeviceExtension);
3599  RequestClearSendTime(DeviceExtension->PowerContext.PowerRequest);
3600 
3601  if (!NT_SUCCESS(status))
3602  {
3603  return status;
3604  }
3605 
3606  // set proper timeout value and max retry count.
3607  switch(DeviceExtension->PowerContext.PowerChangeState.PowerDown)
3608  {
3612  break;
3613 
3614  case PowerDownDeviceLocked:
3615  // Case of issuing SYNC CACHE command. Do not use power irp timeout remaining time in this case
3616  // as we want to give best try on SYNC CACHE command.
3617  retryCount = MAXIMUM_RETRIES;
3618  timeoutValue = DeviceExtension->TimeOutValue;
3619  break;
3620 
3622  {
3623  // Case of issuing STOP UNIT command
3624  // As "Imme" bit is set to '1', this command should be completed in short time.
3625  // This command is at low importance, failure of this command has very small impact.
3626  ULONG secondsRemaining = 0;
3627 
3628 #if (WINVER >= 0x0601)
3629  // this API is introduced in Windows7
3630  PoQueryWatchdogTime(DeviceExtension->LowerPdo, &secondsRemaining);
3631 #endif
3632 
3633  if (secondsRemaining == 0)
3634  {
3635  // not able to retrieve remaining time from PoQueryWatchdogTime API, use default values.
3636  retryCount = MAXIMUM_RETRIES;
3637  timeoutValue = SCSI_CDROM_TIMEOUT;
3638  }
3639  else
3640  {
3641  // plan to leave about 30 seconds to lower level drivers if possible.
3642  if (secondsRemaining >= 32)
3643  {
3644  retryCount = (secondsRemaining - 30)/SCSI_CDROM_TIMEOUT + 1;
3645  timeoutValue = SCSI_CDROM_TIMEOUT;
3646 
3647  if (retryCount > MAXIMUM_RETRIES)
3648  {
3649  retryCount = MAXIMUM_RETRIES;
3650  }
3651 
3652  if (retryCount == 1)
3653  {
3654  timeoutValue = secondsRemaining - 30;
3655  }
3656  }
3657  else
3658  {
3659  // issue the command with minimal timeout value and do not retry on it.
3660  retryCount = 1;
3661  timeoutValue = 2;
3662  }
3663  }
3664  }
3665  break;
3666  default:
3667  NT_ASSERT( FALSE );
3669  return status;
3670  }
3671 
3672  DeviceExtension->PowerContext.RetryCount = retryCount;
3673 
3674  // issue command.
3675  while (shouldRetry)
3676  {
3677 
3678  // set SRB fields.
3679  DeviceExtension->PowerContext.Srb.SrbFlags = SRB_FLAGS_NO_DATA_TRANSFER |
3684 
3685  DeviceExtension->PowerContext.Srb.Function = SRB_FUNCTION_EXECUTE_SCSI;
3686  DeviceExtension->PowerContext.Srb.TimeOutValue = timeoutValue;
3687 
3688  if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceInitial)
3689  {
3690  DeviceExtension->PowerContext.Srb.Function = SRB_FUNCTION_LOCK_QUEUE;
3691  }
3692  else if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceLocked)
3693  {
3694  DeviceExtension->PowerContext.Srb.Function = SRB_FUNCTION_QUIESCE_DEVICE;
3695  }
3696  else if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceQuiesced)
3697  {
3698  // Case of issuing SYNC CACHE command.
3699  DeviceExtension->PowerContext.Srb.CdbLength = 10;
3700  cdb->SYNCHRONIZE_CACHE10.OperationCode = SCSIOP_SYNCHRONIZE_CACHE;
3701  }
3702  else if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceFlushed)
3703  {
3704  // Case of issuing STOP UNIT command.
3705  DeviceExtension->PowerContext.Srb.CdbLength = 6;
3706  cdb->START_STOP.OperationCode = SCSIOP_START_STOP_UNIT;
3707  cdb->START_STOP.Start = 0;
3708  cdb->START_STOP.Immediate = 1;
3709  }
3710  else if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceStopped)
3711  {
3712  DeviceExtension->PowerContext.Srb.Function = SRB_FUNCTION_UNLOCK_QUEUE;
3713  }
3714 
3715  // Set up completion routine and context if requested
3716  if (CompletionRoutine)
3717  {
3718  WdfRequestSetCompletionRoutine(DeviceExtension->PowerContext.PowerRequest,
3720  Context);
3721  }
3722 
3723  status = RequestSend(DeviceExtension,
3724  DeviceExtension->PowerContext.PowerRequest,
3725  DeviceExtension->IoTarget,
3727  &requestSent);
3728 
3729  if (requestSent)
3730  {
3731  if ((CompletionRoutine == NULL) &&
3732  (SRB_STATUS(DeviceExtension->PowerContext.Srb.SrbStatus) != SRB_STATUS_SUCCESS))
3733  {
3734  TracePrint((TRACE_LEVEL_ERROR,
3735  TRACE_FLAG_POWER,
3736  "%p\tError occured when issuing %s command to device. Srb %p, Status %x\n",
3737  DeviceExtension->PowerContext.PowerRequest,
3738  (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceQuiesced) ? "SYNC CACHE" : "STOP UNIT",
3739  &DeviceExtension->PowerContext.Srb,
3740  DeviceExtension->PowerContext.Srb.SrbStatus));
3741 
3742  NT_ASSERT(!(TEST_FLAG(DeviceExtension->PowerContext.Srb.SrbStatus, SRB_STATUS_QUEUE_FROZEN)));
3743 
3744  shouldRetry = RequestSenseInfoInterpret(DeviceExtension,
3745  DeviceExtension->PowerContext.PowerRequest,
3746  &(DeviceExtension->PowerContext.Srb),
3747  retryCount - DeviceExtension->PowerContext.RetryCount,
3748  &status,
3749  &(DeviceExtension->PowerContext.RetryIntervalIn100ns));
3750 
3751  if (shouldRetry && (DeviceExtension->PowerContext.RetryCount-- == 0))
3752  {
3753  shouldRetry = FALSE;
3754  }
3755  }
3756  else
3757  {
3758  // succeeded, do not need to retry.
3759  shouldRetry = FALSE;
3760  }
3761 
3762  }
3763  else
3764  {
3765  // request failed to be sent
3766  shouldRetry = FALSE;
3767  }
3768 
3769  if (shouldRetry)
3770  {
3771  LARGE_INTEGER t;
3772  t.QuadPart = -DeviceExtension->PowerContext.RetryIntervalIn100ns;
3774 
3775  status = PowerContextReuseRequest(DeviceExtension);
3776  if (!NT_SUCCESS(status))
3777  {
3778  shouldRetry = FALSE;
3779  }
3780  }
3781  }
3782 
3783  if (DeviceExtension->PowerContext.PowerChangeState.PowerDown == PowerDownDeviceQuiesced)
3784  {
3785  // record SYNC CACHE command completion time stamp.
3786  KeQueryTickCount(&DeviceExtension->PowerContext.Step1CompleteTime);
3787  }
3788 
3789  return status;
3790 }
#define SRB_FUNCTION_UNLOCK_QUEUE
Definition: srb.h:325
#define SCSIOP_SYNCHRONIZE_CACHE
Definition: cdrw_hw.h:918
#define SRB_FUNCTION_QUIESCE_DEVICE
Definition: srb.h:90
#define SRB_FLAGS_NO_QUEUE_FREEZE
Definition: srb.h:396
#define TRUE
Definition: types.h:120
Definition: cdrw_hw.h:28
LONG NTSTATUS
Definition: precomp.h:26
struct _CDB::_SYNCHRONIZE_CACHE10 SYNCHRONIZE_CACHE10
GLdouble GLdouble t
Definition: gl.h:2047
#define SRB_STATUS(Status)
Definition: srb.h:381
VOID RequestClearSendTime(_In_ WDFREQUEST Request)
Definition: common.c:111
#define MAXIMUM_RETRIES
Definition: cdrom.h:124
return STATUS_NOT_IMPLEMENTED
#define SCSI_CDROM_TIMEOUT
Definition: cdrom.c:170
#define FALSE
Definition: types.h:117
NTSTATUS NTAPI KeDelayExecutionThread(IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Interval OPTIONAL)
Definition: wait.c:283
#define SRB_FLAGS_BYPASS_LOCKED_QUEUE
Definition: srb.h:402
unsigned char BOOLEAN
union _CDB * PCDB
struct _CDB::_START_STOP START_STOP
VOID NTAPI KeQueryTickCount(IN PLARGE_INTEGER TickCount)
Definition: clock.c:165
#define TEST_FLAG(Flags, Bit)
Definition: cdrom.h:1495
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
Definition: srb.h:389
#define SRB_FLAGS_NO_DATA_TRANSFER
Definition: srb.h:394
BOOLEAN RequestSenseInfoInterpret(_In_ PCDROM_DEVICE_EXTENSION DeviceExtension, _In_ WDFREQUEST Request, _In_ PSCSI_REQUEST_BLOCK Srb, _In_ ULONG RetriedCount, _Out_ NTSTATUS *Status, _Out_opt_ _Deref_out_range_(0, MAXIMUM_RETRY_FOR_SINGLE_IO_IN_100NS_UNITS) LONGLONG *RetryIntervalIn100ns)
Definition: sense.c:2467
#define SRB_STATUS_QUEUE_FROZEN
Definition: srb.h:378
NTSTATUS RequestSend(_In_ PCDROM_DEVICE_EXTENSION DeviceExtension, _In_ WDFREQUEST Request, _In_ WDFIOTARGET IoTarget, _In_ ULONG Flags, _Out_opt_ PBOOLEAN RequestSent)
Definition: common.c:3793
#define TRACE_LEVEL_ERROR
Definition: storswtr.h:27
_In_ WDFREQUEST _In_opt_ PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine
Definition: wdfrequest.h:893
#define NULL
Definition: types.h:112
#define SRB_FUNCTION_EXECUTE_SCSI
Definition: srb.h:307
unsigned int ULONG
Definition: retypes.h:1
#define SRB_STATUS_SUCCESS
Definition: srb.h:333
#define SRB_FLAGS_D3_PROCESSING
Definition: srb.h:156
static SERVICE_STATUS status
Definition: service.c:31
#define SCSIOP_START_STOP_UNIT
Definition: cdrw_hw.h:897
#define SRB_FUNCTION_LOCK_QUEUE
Definition: srb.h:324
#define NT_ASSERT
Definition: rtlfuncs.h:3312
Definition: ps.c:97

◆ _Out_writes_()

_Inout_ PDEVICE_OBJECT _Inout_ PIRP _In_ ULONG _Out_writes_ ( )

◆ _Out_writes_bytes_opt_()

◆ _Out_writes_bytes_to_()

_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _Out_writes_bytes_to_ ( BufferLength  ,
ReturnedLength 
)

◆ DEFINE_GUID() [1/9]

DEFINE_GUID ( GUID_DEVICE_BATTERY  ,
0x72631e54L  ,
0x78A4  ,
0x11d0  ,
0xbc  ,
0xf7  ,
0x00  ,
0xaa  ,
0x00  ,
0xb7  ,
0xb3  ,
0x2a   
)

◆ DEFINE_GUID() [2/9]

DEFINE_GUID ( BATTERY_STATUS_WMI_GUID  ,
0xfc4670d1  ,
0xebbf  ,
0x416e  ,
0x87  ,
0xce  ,
0x37  ,
0x4a  ,
0x4e  ,
0xbc  ,
0x11  ,
0x1a   
)

◆ DEFINE_GUID() [3/9]

DEFINE_GUID ( BATTERY_RUNTIME_WMI_GUID  ,
0x535a3767  ,
0x1ac2  ,
0x49bc  ,
0xa0  ,
0x77  ,
0x3f  ,
0x7a  ,
0x02  ,
0xe4  ,
0x0a  ,
0xec   
)

◆ DEFINE_GUID() [4/9]

DEFINE_GUID ( BATTERY_TEMPERATURE_WMI_GUID  ,
0x1a52a14d  ,
0xadce  ,
0x4a44  ,
0x9a  ,
0x3e  ,
0xc8  ,
0xd8  ,
0xf1  ,
0x5f  ,
0xf2  ,
0xc2   
)

◆ DEFINE_GUID() [5/9]

DEFINE_GUID ( BATTERY_FULL_CHARGED_CAPACITY_WMI_GUID  ,
0x40b40565  ,
0x96f7  ,
0x4435  ,
0x86  ,
0x94  ,
0x97  ,
0xe0  ,
0xe4  ,
0x39  ,
0x59  ,
0x05   
)

◆ DEFINE_GUID() [6/9]

DEFINE_GUID ( BATTERY_CYCLE_COUNT_WMI_GUID  ,
0xef98db24  ,
0x0014  ,
0x4c25  ,
0xa5  ,
0x0b  ,
0xc7  ,
0x24  ,
0xae  ,
0x5c  ,
0xd3  ,
0x71   
)

◆ DEFINE_GUID() [7/9]

DEFINE_GUID ( BATTERY_STATIC_DATA_WMI_GUID  ,
0x05e1e463  ,
0xe4e2  ,
0x4ea9  ,
0x80  ,
0xcb  ,
0x9b  ,
0xd4  ,
0xb3  ,
0xca  ,
0x06  ,
0x55   
)

◆ DEFINE_GUID() [8/9]

DEFINE_GUID ( BATTERY_STATUS_CHANGE_WMI_GUID  ,
0xcddfa0c3  ,
0x7c5b  ,
0x4e43  ,
0xa0  ,
0x34  ,
0x05  ,
0x9f  ,
0xa5  ,
0xb8  ,
0x43  ,
0x64   
)

◆ DEFINE_GUID() [9/9]

DEFINE_GUID ( BATTERY_TAG_CHANGE_WMI_GUID  ,
0x5e1f6e19  ,
0x8786  ,
0x4d23  ,
0x94  ,
0xfc  ,
0x9e  ,
0x74  ,
0x6b  ,
0xd5  ,
0xd8  ,
0x88   
)

Variable Documentation

◆ AtRate

Definition at line 183 of file batclass.h.

Referenced by CmBattQueryInformation().

◆ BatteryNotify

_In_ ULONG _In_ PBATTERY_NOTIFY BatteryNotify

Definition at line 215 of file batclass.h.

Referenced by CmBattSetStatusNotify().

◆ BatteryStatus

Definition at line 198 of file batclass.h.

Referenced by CmBattQueryStatus().

◆ BatteryTag

_In_ ULONG BatteryTag

Definition at line 173 of file batclass.h.

Referenced by CmBattSetStatusNotify().

◆ Buffer

◆ BufferLength

◆ ClassData

◆ DeviceObject

Definition at line 363 of file batclass.h.

◆ Disposition

Definition at line 377 of file batclass.h.

◆ GuidIndex

Definition at line 363 of file batclass.h.

◆ Irp

Definition at line 345 of file batclass.h.

◆ Level

Definition at line 183 of file batclass.h.

◆ OutBufferSize

◆ ReturnedLength

◆ WmiLibContext

_In_ PVOID WmiLibContext

Definition at line 377 of file batclass.h.

Referenced by BT958WmiInitialize(), and CmBattSystemControl().