1 // Copyright (c) 2004, Antony C. Roberts
3 // Use of this file is subject to the terms
4 // described in the LICENSE.TXT file that
5 // accompanies this file.
7 // Your use of this file indicates your
8 // acceptance of the terms described in
11 // http://www.freebt.net
13 #ifndef _FREEBT_POWER_H
14 #define _FREEBT_POWER_H
16 typedef struct _POWER_COMPLETION_CONTEXT
18 PDEVICE_OBJECT DeviceObject
;
21 } POWER_COMPLETION_CONTEXT
, *PPOWER_COMPLETION_CONTEXT
;
23 typedef struct _WORKER_THREAD_CONTEXT
25 PDEVICE_OBJECT DeviceObject
;
27 PIO_WORKITEM WorkItem
;
29 } WORKER_THREAD_CONTEXT
, *PWORKER_THREAD_CONTEXT
;
35 NTSTATUS
FreeBT_DispatchPower(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
);
36 NTSTATUS
HandleSystemQueryPower(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
);
37 NTSTATUS
HandleSystemSetPower(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
);
38 NTSTATUS
HandleDeviceQueryPower(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
39 NTSTATUS
SysPoCompletionRoutine(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
, IN PDEVICE_EXTENSION DeviceExtension
);
40 VOID
SendDeviceIrp(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
);
41 VOID
DevPoCompletionRoutine(
42 IN PDEVICE_OBJECT DeviceObject
,
43 IN UCHAR MinorFunction
,
44 IN POWER_STATE PowerState
,
46 IN PIO_STATUS_BLOCK IoStatus
49 NTSTATUS
HandleDeviceSetPower(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
);
50 NTSTATUS
FinishDevPoUpIrp(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
, IN PDEVICE_EXTENSION DeviceExtension
);
51 NTSTATUS
SetDeviceFunctional(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
, IN PDEVICE_EXTENSION DeviceExtension
);
52 NTSTATUS
FinishDevPoDnIrp(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
, IN PDEVICE_EXTENSION DeviceExtension
);
53 NTSTATUS
HoldIoRequests(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
);
54 VOID
HoldIoRequestsWorkerRoutine(IN PDEVICE_OBJECT DeviceObject
, IN PVOID Context
);
55 NTSTATUS
QueueRequest(IN OUT PDEVICE_EXTENSION DeviceExtension
, IN PIRP Irp
);
56 VOID
CancelQueued(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
);
57 NTSTATUS
WaitWakeCompletionRoutine(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
, IN PDEVICE_EXTENSION DeviceExtension
);
58 NTSTATUS
IssueWaitWake(IN PDEVICE_EXTENSION DeviceExtension
);
59 VOID
CancelWaitWake(IN PDEVICE_EXTENSION DeviceExtension
);
60 VOID
WaitWakeCallback(
61 IN PDEVICE_OBJECT DeviceObject
,
62 IN UCHAR MinorFunction
,
63 IN POWER_STATE PowerState
,
65 IN PIO_STATUS_BLOCK IoStatus
68 PCHAR
PowerMinorFunctionString(IN UCHAR MinorFunction
);