/*++ 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 #include #include #include #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"Windows 2002 " // // 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_