157 lines
4.7 KiB
C
157 lines
4.7 KiB
C
|
/*=========================================================================*\
|
||
|
|
||
|
Module: Dfsumr.h
|
||
|
|
||
|
Copyright Microsoft Corporation 2001, All Rights Reserved.
|
||
|
|
||
|
Author: Rohan Phillips - Rohanp
|
||
|
|
||
|
Description: User mode reflector header file
|
||
|
|
||
|
\*=========================================================================*/
|
||
|
|
||
|
#ifndef __DFSUMRSTRCT_H__
|
||
|
#define __DFSUMRSTRCT_H__
|
||
|
|
||
|
// This should be bumped whenever there are changes made to these structures
|
||
|
//
|
||
|
#define UMR_VERSION 1
|
||
|
|
||
|
|
||
|
#define MAX_USERMODE_REFLECTION_BUFFER 16384
|
||
|
|
||
|
#define UMRX_USERMODE_WORKITEM_CORRELATOR_SIZE 4
|
||
|
|
||
|
#define UMR_WORKITEM_HEADER_FLAG_RETURN_IMMEDIATE 0x00000001
|
||
|
#define UMR_WORKITEM_HEADER_ASYNC_COMPLETE 0x00000002
|
||
|
|
||
|
#define DFSUMRSIGNATURE 'DFSU'
|
||
|
|
||
|
//
|
||
|
// enum definitions.
|
||
|
//
|
||
|
typedef enum _USERMODE_WORKITEMS_TYPES {
|
||
|
opUmrIsDfsLink = 1, // 0 is an invalid type
|
||
|
opUmrGetDfsReplicas,
|
||
|
opUmrMax
|
||
|
} USERMODE_WORKITEMS_TYPES;
|
||
|
|
||
|
|
||
|
//
|
||
|
// DFSFILTER_ATTACH/DETACH support
|
||
|
// VOlume and share file names are passed in the PathNameBuffer.
|
||
|
// Both strings are not null terminated, with the source name starting at
|
||
|
// the beginning of FileNameBuffer, and the destination name immediately
|
||
|
// following.
|
||
|
//
|
||
|
|
||
|
typedef struct _DFS_ATTACH_PATH_BUFFER_ {
|
||
|
ULONG VolumeNameLength;
|
||
|
ULONG ShareNameLength;
|
||
|
ULONG Flags;
|
||
|
WCHAR PathNameBuffer[1];
|
||
|
} DFS_ATTACH_PATH_BUFFER, *PDFS_ATTACH_PATH_BUFFER;
|
||
|
|
||
|
|
||
|
#define UMRX_STATIC_REQUEST_LENGTH(__requesttypefield,__lastfieldofrequest) \
|
||
|
(FIELD_OFFSET(UMRX_USERMODE_WORKITEM,__requesttypefield.__lastfieldofrequest) \
|
||
|
+ sizeof(((PUMRX_USERMODE_WORKITEM)NULL)->__requesttypefield.__lastfieldofrequest))
|
||
|
|
||
|
#define UMR_ALIGN(x) ( ((x) % sizeof(double) == 0) ? \
|
||
|
( (x) ) : \
|
||
|
( (x) + sizeof(double) - (x) % sizeof(double) ) )
|
||
|
|
||
|
typedef struct _VarData
|
||
|
{
|
||
|
ULONG cbData;
|
||
|
ULONG cbOffset; // offset from location of this structure
|
||
|
} VAR_DATA, *PVAR_DATA;
|
||
|
|
||
|
// opUmrIsDfsLink
|
||
|
//
|
||
|
typedef struct _UmrIsDfsLinkReq_
|
||
|
{
|
||
|
ULONG Length;
|
||
|
BYTE Buffer[1]; // start of vardata
|
||
|
} UMR_ISDFSLINK_REQ, *PUMR_ISDFSLINK_REQ;
|
||
|
|
||
|
typedef struct _UmrIsDfsLinkResp_
|
||
|
{
|
||
|
BOOL IsADfsLink;
|
||
|
} UMR_ISDFSLINK_RESP, *PUMR_ISDFSLINK_RESP;
|
||
|
|
||
|
|
||
|
// opUmrGetDfsreplicas
|
||
|
//
|
||
|
typedef struct _UmrGetDfsReplicasReq_
|
||
|
{
|
||
|
REPLICA_DATA_INFO RepInfo;
|
||
|
} UMR_GETDFSREPLICAS_REQ, *PUMR_GETDFSREPLICAS_REQ;
|
||
|
|
||
|
typedef struct _UmrGetDfsReplicasResp
|
||
|
{
|
||
|
ULONG Length;
|
||
|
BYTE Buffer[1]; // start of vardata
|
||
|
} UMR_GETDFSREPLICAS_RESP, *PUMR_GETDFSREPLICAS_RESP;
|
||
|
|
||
|
|
||
|
// union for all request structs
|
||
|
//
|
||
|
typedef union _UMRX_USERMODE_WORK_REQUEST
|
||
|
{
|
||
|
UMR_ISDFSLINK_REQ IsDfsLinkRequest;
|
||
|
UMR_GETDFSREPLICAS_REQ GetDfsReplicasRequest;
|
||
|
} UMRX_USERMODE_WORK_REQUEST, *PUMRX_USERMODE_WORK_REQUEST;
|
||
|
|
||
|
|
||
|
// union for all response structs
|
||
|
//
|
||
|
typedef union _UMRX_USERMODE_WORK_RESPONSE
|
||
|
{
|
||
|
UMR_ISDFSLINK_RESP IsDfsLinkResponse;
|
||
|
UMR_GETDFSREPLICAS_RESP GetDfsReplicasResponse;
|
||
|
} UMRX_USERMODE_WORK_RESPONSE, *PUMRX_USERMODE_WORK_RESPONSE;
|
||
|
|
||
|
|
||
|
// header that's common to all requests and responses
|
||
|
//
|
||
|
typedef struct _UMRX_USERMODE_WORKITEM_HEADER {
|
||
|
union {
|
||
|
ULONG_PTR CorrelatorAsUInt[UMRX_USERMODE_WORKITEM_CORRELATOR_SIZE];
|
||
|
double forcealignment;
|
||
|
};
|
||
|
IO_STATUS_BLOCK IoStatus;
|
||
|
USERMODE_WORKITEMS_TYPES WorkItemType;
|
||
|
DWORD dwDebugSig;
|
||
|
ULONG ulHeaderVersion;
|
||
|
ULONG ulFlags;
|
||
|
} UMRX_USERMODE_WORKITEM_HEADER, *PUMRX_USERMODE_WORKITEM_HEADER;
|
||
|
|
||
|
// The top level structure.
|
||
|
//
|
||
|
typedef struct _UMRX_USERMODE_WORKITEM {
|
||
|
UMRX_USERMODE_WORKITEM_HEADER Header;
|
||
|
union {
|
||
|
UMRX_USERMODE_WORK_REQUEST WorkRequest;
|
||
|
UMRX_USERMODE_WORK_RESPONSE WorkResponse;
|
||
|
};
|
||
|
CHAR Pad[1];
|
||
|
} UMRX_USERMODE_WORKITEM, *PUMRX_USERMODE_WORKITEM;
|
||
|
|
||
|
|
||
|
#define DFSFILTER_PROCESS_TERMINATION_FILEPATH L"\\ProcessTermination\\FilePath"
|
||
|
|
||
|
#define DFSFILTER_W32_DEVICE_NAME L"\\\\.\\DfsFilter"
|
||
|
#define DFSFILTER_DEVICE_TYPE 0x1235
|
||
|
|
||
|
#define DFSFILTER_START_UMRX (ULONG) CTL_CODE( DFSFILTER_DEVICE_TYPE, 100, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||
|
#define DFSFILTER_STOP_UMRX (ULONG) CTL_CODE( DFSFILTER_DEVICE_TYPE, 101, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||
|
#define DFSFILTER_PROCESS_UMRXPACKET (ULONG) CTL_CODE( DFSFILTER_DEVICE_TYPE, 102, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||
|
#define DFSFILTER_GETREPLICA_INFO (ULONG) CTL_CODE( DFSFILTER_DEVICE_TYPE, 103, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||
|
#define DFSFILTER_ATTACH_FILESYSTEM (ULONG) CTL_CODE( DFSFILTER_DEVICE_TYPE, 104, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||
|
#define DFSFILTER_DETACH_FILESYSTEM (ULONG) CTL_CODE( DFSFILTER_DEVICE_TYPE, 105, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||
|
#define DFSFILTER_PURGE_SHARELIST (ULONG) CTL_CODE( DFSFILTER_DEVICE_TYPE, 106, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||
|
|
||
|
#endif
|
||
|
|