📄 scsiwmi.h
字号:
/*++ BUILD Version: 0000 // Increment this if a change has global effects
Copyright (c) 1998 Microsoft Corporation
Module Name:
scsiwmi.h
Abstract:
This module contains the internal structure definitions and APIs used by
the SCSI WMILIB helper functions
Author:
AlanWar
Revision History:
--*/
#ifndef _SCSIWMI_
#define _SCSIWMI_
#if defined (_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
#ifdef __cplusplus
extern "C" {
#endif
//
// This is a per-request context buffer that is needed for every wmi srb.
// The request context must remain valid throughout the entire processing
// of the srb, at least until ScsiPortWmiPostProcess returns with the
// final srb return status and buffer size. If the srb can
// pend then memory for this buffer should be allocated from the SRB
// extension. If not then the memory can be allocated from a stack frame that
// does not go out of scope.
//
typedef struct
{
PVOID UserContext; // Available for miniport use
ULONG BufferSize; // Reserved for SCSIWMI use
PUCHAR Buffer; // Reserved for SCSIWMI use
UCHAR MinorFunction;// Reserved for SCSIWMI use
UCHAR ReturnStatus; // Available to miniport after ScsiPortWmiPostProcess
ULONG ReturnSize; // Available to miniport after ScsiPortWmiPostProcess
} SCSIWMI_REQUEST_CONTEXT, *PSCSIWMI_REQUEST_CONTEXT;
#define ScsiPortWmiGetReturnStatus(RequestContext) ((RequestContext)->ReturnStatus)
#define ScsiPortWmiGetReturnSize(RequestContext) ((RequestContext)->ReturnSize)
//
// This defines a guid to be registered with WMI.
//
typedef struct
{
LPCGUID Guid; // Guid representing data block
ULONG InstanceCount; // Count of Instances of Datablock
ULONG Flags; // Additional flags (see WMIREGINFO in wmistr.h)
} SCSIWMIGUIDREGINFO, *PSCSIWMIGUIDREGINFO;
typedef
UCHAR
(*PSCSIWMI_QUERY_REGINFO) (
IN PVOID DeviceContext,
IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
OUT PWCHAR *MofResourceName
);
/*++
Routine Description:
This routine is a callback into the miniport to retrieve information about
the guids being registered.
This callback is synchronous and may not be pended. Also
ScsiPortWmiPostProcess should not be called from within this callback.
Arguments:
DeviceContext is a caller specified context value originally passed to
ScsiPortWmiDispatchFunction.
RequestContext is a context associated with the srb being processed.
MofResourceName returns with a pointer to a WCHAR string with name of
the MOF resource attached to the miniport binary image file. If
the driver does not have a mof resource attached then this can
be returned as NULL.
Return Value:
TRUE if request is pending else FALSE
--*/
typedef
BOOLEAN
(*PSCSIWMI_QUERY_DATABLOCK) (
IN PVOID Context,
IN PSCSIWMI_REQUEST_CONTEXT DispatchContext,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG InstanceCount,
IN OUT PULONG InstanceLengthArray,
IN ULONG BufferAvail,
OUT PUCHAR Buffer
);
/*++
Routine Description:
This routine is a callback into the miniport to query for the contents of
one or more instances of a data block. This callback may be called with
an output buffer that is too small to return all of the data queried.
In this case the callback is responsible to report the correct output
buffer size needed.
If the request can be completed immediately without pending,
ScsiPortWmiPostProcess should be called from within this callback and
FALSE returned.
If the request cannot be completed within this callback then TRUE should
be returned. Once the pending operations are finished the miniport should
call ScsiPortWmiPostProcess and then complete the srb.
Arguments:
DeviceContext is a caller specified context value originally passed to
ScsiPortWmiDispatchFunction.
RequestContext is a context associated with the srb being processed.
GuidIndex is the index into the list of guids provided when the
miniport registered
InstanceIndex is the index that denotes first instance of the data block
is being queried.
InstanceCount is the number of instances expected to be returned for
the data block.
InstanceLengthArray is a pointer to an array of ULONG that returns the
lengths of each instance of the data block. This may be NULL when
there is not enough space in the output buffer to fufill the request.
In this case the miniport should call ScsiPortWmiPostProcess with
a status of SRB_STATUS_DATA_OVERRUN and the size of the output buffer
needed to fufill the request.
BufferAvail on entry has the maximum size available to write the data
blocks in the output buffer. If the output buffer is not large enough
to return all of the data blocks then the miniport should call
ScsiPortWmiPostProcess with a status of SRB_STATUS_DATA_OVERRUN
and the size of the output buffer needed to fufill the request.
Buffer on return is filled with the returned data blocks. Note that each
instance of the data block must be aligned on a 8 byte boundry. This
may be NULL when there is not enough space in the output buffer to
fufill the request. In this case the miniport should call
ScsiPortWmiPostProcess with a status of SRB_STATUS_DATA_OVERRUN and
the size of the output buffer needed to fufill the request.
Return Value:
TRUE if request is pending else FALSE
--*/
typedef
BOOLEAN
(*PSCSIWMI_SET_DATABLOCK) (
IN PVOID DeviceContext,
IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG BufferSize,
IN PUCHAR Buffer
);
/*++
Routine Description:
This routine is a callback into the miniport to set the contents of an
entire instance of a data block.
If the request can be completed immediately without pending,
ScsiPortWmiPostProcess should be called from within this callback and
FALSE returned.
If the request cannot be completed within this callback then TRUE should
be returned. Once the pending operations are finished the miniport should
call ScsiPortWmiPostProcess and then complete the srb.
Arguments:
DeviceContext is a caller specified context value originally passed to
ScsiPortWmiDispatchFunction.
RequestContext is a context associated with the srb being processed.
GuidIndex is the index into the list of guids provided when the
miniport registered
InstanceIndex is the index that denotes which instance of the data block
is being set.
BufferSize has the size of the data block passed
Buffer has the new values for the data block
Return Value:
TRUE if request is pending else FALSE
--*/
typedef
BOOLEAN
(*PSCSIWMI_SET_DATAITEM) (
IN PVOID DeviceContext,
IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG DataItemId,
IN ULONG BufferSize,
IN PUCHAR Buffer
);
/*++
Routine Description:
This routine is a callback into the miniport to set a single data item
in a single instance of a data block.
If the request can be completed immediately without pending,
ScsiPortWmiPostProcess should be called from within this callback and
FALSE returned.
If the request cannot be completed within this callback then TRUE should
be returned. Once the pending operations are finished the miniport should
call ScsiPortWmiPostProcess and then complete the srb.
Arguments:
DeviceContext is a caller specified context value originally passed to
ScsiPortWmiDispatchFunction.
RequestContext is a context associated with the srb being processed.
GuidIndex is the index into the list of guids provided when the
miniport registered
InstanceIndex is the index that denotes which instance of the data block
is being set.
DataItemId has the id of the data item being set
BufferSize has the size of the data item passed
Buffer has the new values for the data item
Return Value:
TRUE if request is pending else FALSE
--*/
typedef
BOOLEAN
(*PSCSIWMI_EXECUTE_METHOD) (
IN PVOID DeviceContext,
IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG MethodId,
IN ULONG InBufferSize,
IN ULONG OutBufferSize,
IN OUT PUCHAR Buffer
);
/*++
Routine Description:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -