477 lines
19 KiB
OpenEdge ABL
477 lines
19 KiB
OpenEdge ABL
/*++ BUILD Version: 0009 // Increment this if a change has global effects
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
ntddnfs.h
|
|
|
|
Abstract:
|
|
|
|
This is the include file that defines all constants and types for
|
|
accessing the redirector file system device.
|
|
|
|
Author:
|
|
|
|
Steve Wood (stevewo) 27-May-1990
|
|
|
|
Revision History:
|
|
|
|
Larry Osterman (larryo)
|
|
Rita Wong (ritaw) 19-Feb-1991
|
|
John Rogers (JohnRo) 08-Mar-1991
|
|
|
|
--*/
|
|
|
|
#ifndef _NTDDNFS_
|
|
#define _NTDDNFS_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <windef.h>
|
|
#include <lmcons.h>
|
|
#include <lmwksta.h>
|
|
#include <ntmsv1_0.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// Device Name - this string is the name of the device. It is the name
|
|
// that should be passed to NtOpenFile when accessing the device.
|
|
//
|
|
// Note: For devices that support multiple units, it should be suffixed
|
|
// with the Ascii representation of the unit number.
|
|
//
|
|
//
|
|
// Device Name - this string is the name of the device. It is the name
|
|
// that should be passed to NtOpenFile when accessing the device.
|
|
//
|
|
// Note: For devices that support multiple units, it should be suffixed
|
|
// with the Ascii representation of the unit number.
|
|
//
|
|
|
|
#define DD_NFS2_DEVICE_NAME "\\Device\\FsWrap"
|
|
#define DD_NFS2_DEVICE_NAME_U L"\\Device\\FsWrap"
|
|
|
|
#define DD_NFS_DEVICE_NAME "\\Device\\LanmanRedirector"
|
|
#define DD_NFS_DEVICE_NAME_U L"\\Device\\LanmanRedirector"
|
|
|
|
//
|
|
// The file system name as returned by
|
|
// NtQueryInformationVolume(FileFsAttributeInformation)
|
|
//
|
|
#define DD_NFS_FILESYS_NAME "LMRDR"
|
|
#define DD_NFS_FILESYS_NAME_U L"LMRDR"
|
|
|
|
//
|
|
// EA Names for creating a tree connection
|
|
//
|
|
#define EA_NAME_CONNECT "NoConnect"
|
|
#define EA_NAME_DOMAIN "Domain"
|
|
#define EA_NAME_USERNAME "UserName"
|
|
#define EA_NAME_PASSWORD "Password"
|
|
#define EA_NAME_TYPE "Type"
|
|
#define EA_NAME_TRANSPORT "Transport"
|
|
#define EA_NAME_PRINCIPAL "Principal"
|
|
#define EA_NAME_MRXCONTEXT "MinirdrContext"
|
|
#define EA_NAME_CSCAGENT "CscAgent"
|
|
|
|
#define EA_NAME_DOMAIN_U L"Domain"
|
|
#define EA_NAME_USERNAME_U L"UserName"
|
|
#define EA_NAME_PASSWORD_U L"Password"
|
|
#define EA_NAME_TYPE_U L"Type"
|
|
#define EA_NAME_TRANSPORT_U L"Transport"
|
|
#define EA_NAME_PRINCIPAL_U L"Principal"
|
|
#define EA_NAME_MRXCONTEXT_U L"MinirdrContext"
|
|
#define EA_NAME_CSCAGENT_U L"CscAgent"
|
|
|
|
#define TRANSACTION_REQUEST 0x00000003
|
|
|
|
//
|
|
// Redirector specific configuration options (separate from workstation
|
|
// service configuration options)
|
|
//
|
|
|
|
#define RDR_CONFIG_PARAMETERS L"Parameters"
|
|
|
|
#define RDR_CONFIG_USE_WRITEBHND L"UseWriteBehind"
|
|
#define RDR_CONFIG_USE_ASYNC_WRITEBHND L"UseAsyncWriteBehind"
|
|
#define RDR_CONFIG_LOWER_SEARCH_THRESHOLD L"LowerSearchThreshold"
|
|
#define RDR_CONFIG_LOWER_SEARCH_BUFFSIZE L"LowerSearchBufferSize"
|
|
#define RDR_CONFIG_UPPER_SEARCH_BUFFSIZE L"UpperSearchBufferSize"
|
|
#define RDR_CONFIG_STACK_SIZE L"StackSize"
|
|
#define RDR_CONFIG_CONNECT_TIMEOUT L"ConnectMaxTimeout"
|
|
#define RDR_CONFIG_RAW_TIME_LIMIT L"RawIoTimeLimit"
|
|
#define RDR_CONFIG_OS2_SESSION_LIMIT L"Os2SessionLimit"
|
|
#define RDR_CONFIG_TURBO_MODE L"TurboMode"
|
|
|
|
#define RDR_CONFIG_CURRENT_WINDOWS_VERSION L"\\REGISTRY\\Machine\\Software\\Microsoft\\Windows Nt\\CurrentVersion"
|
|
#define RDR_CONFIG_OPERATING_SYSTEM L"CurrentBuildNumber"
|
|
#define RDR_CONFIG_OPERATING_SYSTEM_VERSION L"CurrentVersion"
|
|
#define RDR_CONFIG_OPERATING_SYSTEM_NAME L"ProductName"
|
|
|
|
//
|
|
// NtDeviceIoControlFile/NtFsControlFile IoControlCode values for this device.
|
|
//
|
|
// Warning: Remember that the low two bits of the code specify how the
|
|
// buffers are passed to the driver!
|
|
//
|
|
//
|
|
// Method = 00 - Buffer both input and output buffers for the request
|
|
// Method = 01 - Buffer input, map output buffer to an MDL as an IN buff
|
|
// Method = 10 - Buffer input, map output buffer to an MDL as an OUT buff
|
|
// Method = 11 - Do not buffer either the input or output
|
|
//
|
|
|
|
#define IOCTL_RDR_BASE FILE_DEVICE_NETWORK_FILE_SYSTEM
|
|
|
|
#define _RDR_CONTROL_CODE(request, method, access) \
|
|
CTL_CODE(IOCTL_RDR_BASE, request, method, access)
|
|
|
|
|
|
#define FSCTL_LMR_START _RDR_CONTROL_CODE(100, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_STOP _RDR_CONTROL_CODE(101, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_SET_CONFIG_INFO _RDR_CONTROL_CODE(102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_GET_CONFIG_INFO _RDR_CONTROL_CODE(103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_GET_CONNECTION_INFO _RDR_CONTROL_CODE(104, METHOD_NEITHER, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_ENUMERATE_CONNECTIONS _RDR_CONTROL_CODE(105, METHOD_NEITHER, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_GET_VERSIONS _RDR_CONTROL_CODE(106, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_DELETE_CONNECTION _RDR_CONTROL_CODE(107, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_BIND_TO_TRANSPORT _RDR_CONTROL_CODE(108, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_UNBIND_FROM_TRANSPORT _RDR_CONTROL_CODE(109, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_ENUMERATE_TRANSPORTS _RDR_CONTROL_CODE(110, METHOD_NEITHER, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_GET_HINT_SIZE _RDR_CONTROL_CODE(113, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_TRANSACT _RDR_CONTROL_CODE(114, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_ENUMERATE_PRINT_INFO _RDR_CONTROL_CODE(115, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_GET_STATISTICS _RDR_CONTROL_CODE(116, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_START_SMBTRACE _RDR_CONTROL_CODE(117, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_END_SMBTRACE _RDR_CONTROL_CODE(118, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_START_RBR _RDR_CONTROL_CODE(119, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_SET_DOMAIN_NAME _RDR_CONTROL_CODE(120, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_SET_SERVER_GUID _RDR_CONTROL_CODE(121, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_LMR_QUERY_TARGET_INFO _RDR_CONTROL_CODE(122, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
//
|
|
// the following fsctl controlcodes are reserved for the fswrap device and minirdrs
|
|
//
|
|
#define FSCTL_FSWRAP_RESERVED_LOW _RDR_CONTROL_CODE(200, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_FSWRAP_RESERVED_HIGH _RDR_CONTROL_CODE(219, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_MINIRDR_RESERVED_LOW _RDR_CONTROL_CODE(220, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_MINIRDR_RESERVED_HIGH _RDR_CONTROL_CODE(239, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
//
|
|
// WARNING: codes from 240-255 are reserved, do not use them.
|
|
//
|
|
|
|
//
|
|
// Identifies the data structure type for Buffer 2 of each FSCtl
|
|
//
|
|
typedef enum {
|
|
ConfigInformation, // FSCTL_LMR_START,
|
|
// FSCTL_LMR_SET_CONFIG_INFO,
|
|
// FSCTL_LMR_GET_CONFIG_INFO
|
|
// (structure found in wksta.h)
|
|
|
|
GetConnectionInfo, // FSCTL_LMR_ENUMERATE_CONNECTIONS,
|
|
// FSCTL_LMR_GET_CONNECTION_INFO
|
|
EnumerateTransports // FSCTL_LMR_ENUMERATE_TRANSPORTS
|
|
// (structure found in wksta.h)
|
|
} FSCTL_LMR_STRUCTURES;
|
|
|
|
//
|
|
// LAN Man Redirector Request Packet used by the Workstation service
|
|
// to pass parameters to the Redirector through Buffer 1 of
|
|
// NtFsControlFile.
|
|
//
|
|
// Additional input or output of each FSCtl is found in Buffer 2.
|
|
//
|
|
|
|
#define REQUEST_PACKET_VERSION 0x00000006L // Structure version.
|
|
|
|
typedef struct _LMR_REQUEST_PACKET {
|
|
|
|
FSCTL_LMR_STRUCTURES Type; // Type of structure in Buffer 2
|
|
ULONG Version; // Version of structure in Buffer 2
|
|
ULONG Level; // Level of information of force level
|
|
LUID LogonId; // User logon session identifier
|
|
|
|
union {
|
|
|
|
struct {
|
|
ULONG RedirectorNameLength; // Length of computer name.
|
|
ULONG DomainNameLength; // Length of primary domain name.
|
|
WCHAR RedirectorName[1]; // Computer name (NOT null terminated)
|
|
// WCHAR DomainName[1]; // Domain name - After computer name.
|
|
} Start; // IN
|
|
|
|
struct {
|
|
ULONG EntriesRead; // Number of entries returned
|
|
ULONG TotalEntries; // Total entries available
|
|
ULONG TotalBytesNeeded; // Total bytes needed to read all entries
|
|
ULONG ResumeHandle; // Resume handle.
|
|
} Get; // OUT
|
|
|
|
struct {
|
|
ULONG WkstaParameter; // Specifies the entire structure or a
|
|
// field to set on input; if any
|
|
// field is invalid, specifies the
|
|
// one at fault on output.
|
|
} Set; // IN OUT
|
|
|
|
struct {
|
|
ULONG RedirectorVersion; // Version of the Redirector
|
|
ULONG RedirectorPlatform; // Redirector platform base number
|
|
ULONG MajorVersion; // LAN Man major version number
|
|
ULONG MinorVersion; // LAN Man minor version number
|
|
} GetVersion; // OUT
|
|
|
|
struct {
|
|
ULONG WkstaParameter; // Specifies the parameter at fault
|
|
// if a parameter is invalid OUT
|
|
ULONG QualityOfService; // Quality of service indicator IN
|
|
ULONG TransportNameLength; // not including terminator IN
|
|
WCHAR TransportName[1]; // Name of transport provider IN
|
|
} Bind;
|
|
|
|
struct {
|
|
ULONG TransportNameLength; // not including terminator
|
|
WCHAR TransportName[1]; // Name of transport provider
|
|
} Unbind; // IN
|
|
|
|
struct {
|
|
ULONG ConnectionsHint; // Number of bytes needed for buffer
|
|
// to enumerate tree connections
|
|
ULONG TransportsHint; // Number of bytes needed for buffer
|
|
// to enumerate transports
|
|
} GetHintSize; // OUT
|
|
|
|
struct {
|
|
ULONG Index; // Entry in the queue to return, 0 on
|
|
// first call, value of RestartIndex on
|
|
// subsequent calls.
|
|
} GetPrintQueue; // IN
|
|
|
|
} Parameters;
|
|
|
|
} LMR_REQUEST_PACKET, *PLMR_REQUEST_PACKET;
|
|
|
|
//
|
|
// Mask bits for use with Parameters.GetConnectionInfo.Capabilities:
|
|
//
|
|
|
|
#define CAPABILITY_CASE_SENSITIVE_PASSWDS 0x00000001L
|
|
#define CAPABILITY_REMOTE_ADMIN_PROTOCOL 0x00000002L
|
|
#define CAPABILITY_RPC 0x00000004L
|
|
#define CAPABILITY_SAM_PROTOCOL 0x00000008L
|
|
#define CAPABILITY_UNICODE 0x00000010L
|
|
|
|
//
|
|
// Output buffer structure of FSCTL_LMR_ENUMERATE_CONNECTIONS used
|
|
// to implement NetUseEnum. The returned data is actually an array
|
|
// of this structure.
|
|
//
|
|
|
|
typedef struct _LMR_CONNECTION_INFO_0 {
|
|
UNICODE_STRING UNCName; // Name of UNC connection
|
|
ULONG ResumeKey; // Resume key for this entry.
|
|
} LMR_CONNECTION_INFO_0, *PLMR_CONNECTION_INFO_0;
|
|
|
|
typedef struct _LMR_CONNECTION_INFO_1 {
|
|
UNICODE_STRING UNCName; // Name of UNC connection
|
|
ULONG ResumeKey; // Resume key for this entry.
|
|
|
|
DEVICE_TYPE SharedResourceType; // Type of shared resource
|
|
ULONG ConnectionStatus; // Status of the connection
|
|
ULONG NumberFilesOpen; // Number of opened files
|
|
} LMR_CONNECTION_INFO_1, *PLMR_CONNECTION_INFO_1;
|
|
|
|
typedef struct _LMR_CONNECTION_INFO_2 {
|
|
UNICODE_STRING UNCName; // Name of UNC connection
|
|
ULONG ResumeKey; // Resume key for this entry.
|
|
DEVICE_TYPE SharedResourceType; // Type of shared resource
|
|
ULONG ConnectionStatus; // Status of the connection
|
|
ULONG NumberFilesOpen; // Number of opened files
|
|
|
|
UNICODE_STRING UserName; // User who created connection.
|
|
UNICODE_STRING DomainName; // Domain of user who created connection.
|
|
ULONG Capabilities; // Bit mask of remote abilities.
|
|
UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH]; // User session key
|
|
UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH]; // Lanman session key
|
|
} LMR_CONNECTION_INFO_2, *PLMR_CONNECTION_INFO_2;
|
|
|
|
typedef struct _LMR_CONNECTION_INFO_3 {
|
|
UNICODE_STRING UNCName; // Name of UNC connection
|
|
ULONG ResumeKey; // Resume key for this entry.
|
|
DEVICE_TYPE SharedResourceType; // Type of shared resource
|
|
ULONG ConnectionStatus; // Status of the connection
|
|
ULONG NumberFilesOpen; // Number of opened files
|
|
|
|
UNICODE_STRING UserName; // User who created connection.
|
|
UNICODE_STRING DomainName; // Domain of user who created connection.
|
|
ULONG Capabilities; // Bit mask of remote abilities.
|
|
UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH]; // User session key
|
|
UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH]; // Lanman session key
|
|
UNICODE_STRING TransportName; // Transport connection is active on
|
|
ULONG Throughput; // Throughput of connection.
|
|
ULONG Delay; // Small packet overhead.
|
|
LARGE_INTEGER TimeZoneBias; // Time zone delta in 100ns units.
|
|
BOOL IsSpecialIpcConnection; // True IFF there is a special IPC connection active.
|
|
BOOL Reliable; // True iff the connection is reliable
|
|
BOOL ReadAhead; // True iff readahead is active on connection.
|
|
BOOL Core;
|
|
BOOL MsNet103;
|
|
BOOL Lanman10;
|
|
BOOL WindowsForWorkgroups;
|
|
BOOL Lanman20;
|
|
BOOL Lanman21;
|
|
BOOL WindowsNt;
|
|
BOOL MixedCasePasswords;
|
|
BOOL MixedCaseFiles;
|
|
BOOL LongNames;
|
|
BOOL ExtendedNegotiateResponse;
|
|
BOOL LockAndRead;
|
|
BOOL NtSecurity;
|
|
BOOL SupportsEa;
|
|
BOOL NtNegotiateResponse;
|
|
BOOL CancelSupport;
|
|
BOOL UnicodeStrings;
|
|
BOOL LargeFiles;
|
|
BOOL NtSmbs;
|
|
BOOL RpcRemoteAdmin;
|
|
BOOL NtStatusCodes;
|
|
BOOL LevelIIOplock;
|
|
BOOL UtcTime;
|
|
BOOL UserSecurity;
|
|
BOOL EncryptsPasswords;
|
|
} LMR_CONNECTION_INFO_3, *PLMR_CONNECTION_INFO_3;
|
|
|
|
#define TRANSACTION_VERSION 0x00000002L // Structure version.
|
|
typedef struct _LMR_TRANSACTION {
|
|
ULONG Type; // Type of structure
|
|
ULONG Size; // Size of fixed portion of structure
|
|
ULONG Version; // Structure version.
|
|
ULONG NameLength; // Number of bytes in name (in path
|
|
// format, e.g., \server\pipe\netapi\4)
|
|
ULONG NameOffset; // Offset of name in buffer.
|
|
BOOLEAN ResponseExpected; // Should remote system respond?
|
|
ULONG Timeout; // Timeout time in milliseconds.
|
|
ULONG SetupWords; // Number of trans setup words (may be
|
|
// 0). (setup words are input/output.)
|
|
ULONG SetupOffset; // Offset of setup (may be 0 for none).
|
|
ULONG MaxSetup; // Size of setup word array (may be 0).
|
|
ULONG ParmLength; // Input param area length (may be 0).
|
|
PVOID ParmPtr; // Input parameter area (may be NULL).
|
|
ULONG MaxRetParmLength; // Output param. area length (may be 0).
|
|
ULONG DataLength; // Input data area length (may be 0).
|
|
PVOID DataPtr; // Input data area (may be NULL).
|
|
ULONG MaxRetDataLength; // Output data area length (may be 0).
|
|
PVOID RetDataPtr; // Output data area (may be NULL).
|
|
} LMR_TRANSACTION, *PLMR_TRANSACTION;
|
|
|
|
|
|
//
|
|
// Output buffer structure of FSCTL_LMR_ENUMERATE_PRINT_INFO used
|
|
// to implement DosPrintQEnum to down level servers. Caller must supply
|
|
// a buffer at least sizeof( LMR_GET_PRINT_QUEUE ) + UNLEN
|
|
//
|
|
|
|
typedef struct _LMR_GET_PRINT_QUEUE {
|
|
ANSI_STRING OriginatorName; // Name of user that did print
|
|
LARGE_INTEGER CreateTime; // When file was created
|
|
ULONG EntryStatus; // Held/Printing etc.
|
|
ULONG FileNumber; // Spool file number from create
|
|
// print request.
|
|
ULONG FileSize;
|
|
ULONG RestartIndex; // Index of the next entry in queue
|
|
// note this is not last index+1
|
|
// either a value of 0 or an error
|
|
// indicates end-of-queue
|
|
|
|
} LMR_GET_PRINT_QUEUE, *PLMR_GET_PRINT_QUEUE;
|
|
|
|
//
|
|
// NB: The following structure is STAT_WORKSTATION_0 in sdk\inc\lmstats.h. If
|
|
// you change the structure, change it in both places
|
|
//
|
|
|
|
typedef struct _REDIR_STATISTICS {
|
|
LARGE_INTEGER StatisticsStartTime;
|
|
|
|
LARGE_INTEGER BytesReceived;
|
|
LARGE_INTEGER SmbsReceived;
|
|
LARGE_INTEGER PagingReadBytesRequested;
|
|
LARGE_INTEGER NonPagingReadBytesRequested;
|
|
LARGE_INTEGER CacheReadBytesRequested;
|
|
LARGE_INTEGER NetworkReadBytesRequested;
|
|
|
|
LARGE_INTEGER BytesTransmitted;
|
|
LARGE_INTEGER SmbsTransmitted;
|
|
LARGE_INTEGER PagingWriteBytesRequested;
|
|
LARGE_INTEGER NonPagingWriteBytesRequested;
|
|
LARGE_INTEGER CacheWriteBytesRequested;
|
|
LARGE_INTEGER NetworkWriteBytesRequested;
|
|
|
|
ULONG InitiallyFailedOperations;
|
|
ULONG FailedCompletionOperations;
|
|
|
|
ULONG ReadOperations;
|
|
ULONG RandomReadOperations;
|
|
ULONG ReadSmbs;
|
|
ULONG LargeReadSmbs;
|
|
ULONG SmallReadSmbs;
|
|
|
|
ULONG WriteOperations;
|
|
ULONG RandomWriteOperations;
|
|
ULONG WriteSmbs;
|
|
ULONG LargeWriteSmbs;
|
|
ULONG SmallWriteSmbs;
|
|
|
|
ULONG RawReadsDenied;
|
|
ULONG RawWritesDenied;
|
|
|
|
ULONG NetworkErrors;
|
|
|
|
// Connection/Session counts
|
|
ULONG Sessions;
|
|
ULONG FailedSessions;
|
|
ULONG Reconnects;
|
|
ULONG CoreConnects;
|
|
ULONG Lanman20Connects;
|
|
ULONG Lanman21Connects;
|
|
ULONG LanmanNtConnects;
|
|
ULONG ServerDisconnects;
|
|
ULONG HungSessions;
|
|
ULONG UseCount;
|
|
ULONG FailedUseCount;
|
|
|
|
//
|
|
// Queue Lengths (updates protected by RdrMpxTableSpinLock NOT
|
|
// RdrStatisticsSpinlock)
|
|
//
|
|
|
|
ULONG CurrentCommands;
|
|
} REDIR_STATISTICS, *PREDIR_STATISTICS;
|
|
|
|
//
|
|
// FSCTL_LMR_QUERY_TARGET_INFO
|
|
//
|
|
typedef struct _LMR_QUERY_TARGET_INFO {
|
|
// The allocation size of the entire LMR_QUERY_TARGET_INFO. RDR will update it with the
|
|
// actual size used.
|
|
ULONG BufferLength;
|
|
|
|
// The Buffer contains the marshelled TargetInfo
|
|
USHORT TargetInfoMarshalled[1];
|
|
} LMR_QUERY_TARGET_INFO, *PLMR_QUERY_TARGET_INFO;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // ifndef _NTDDNFS_
|