summaryrefslogtreecommitdiffstats
path: root/private/nw/inc/ntddnwfs.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/nw/inc/ntddnwfs.h')
-rw-r--r--private/nw/inc/ntddnwfs.h625
1 files changed, 625 insertions, 0 deletions
diff --git a/private/nw/inc/ntddnwfs.h b/private/nw/inc/ntddnwfs.h
new file mode 100644
index 000000000..28fe63515
--- /dev/null
+++ b/private/nw/inc/ntddnwfs.h
@@ -0,0 +1,625 @@
+/*++ BUILD Version: 0009 // Increment this if a change has global effects
+
+Copyright (c) 1987-1993 Microsoft Corporation
+
+Module Name:
+
+ ntddnwfs.h
+
+Abstract:
+
+ This is the include file that defines all constants and types for
+ accessing the NetWare redirector file system device.
+
+Author:
+
+ Colin Watson (ColinW) 23-Dec-1992
+
+Revision History:
+
+
+--*/
+
+#ifndef _NTDDNWFS_
+#define _NTDDNWFS_
+
+#include <windef.h>
+#include <winnetwk.h> // NETRESOURCE structure
+
+typedef CHAR SERVERNAME[48];
+typedef SERVERNAME* PSERVERNAME;
+
+//
+// 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_NWFS_DEVICE_NAME "\\Device\\NwRdr"
+#define DD_NWFS_DEVICE_NAME_U L"\\Device\\NwRdr"
+
+//
+// The file system name as returned by
+// NtQueryInformationVolume(FileFsAttributeInformation)
+//
+#define DD_NWFS_FILESYS_NAME "NWRDR"
+#define DD_NWFS_FILESYS_NAME_U L"NWRDR"
+
+//
+// Connection type bit mask
+//
+#define CONNTYPE_DISK 0x00000001
+#define CONNTYPE_PRINT 0x00000002
+#define CONNTYPE_ANY ( CONNTYPE_DISK | CONNTYPE_PRINT )
+#define CONNTYPE_IMPLICIT 0x80000000
+#define CONNTYPE_SYMBOLIC 0x40000000
+
+//
+// EA Names for creating a connection
+//
+#define EA_NAME_USERNAME "UserName"
+#define EA_NAME_PASSWORD "Password"
+#define EA_NAME_TYPE "Type"
+#define EA_NAME_CREDENTIAL_EX "ExCredentials"
+
+#define TRANSACTION_REQUEST 0x00000003
+
+
+//
+// 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_NWRDR_BASE FILE_DEVICE_NETWORK_FILE_SYSTEM
+
+#define _NWRDR_CONTROL_CODE(request, method, access) \
+ CTL_CODE(IOCTL_NWRDR_BASE, request, method, access)
+
+#define FSCTL_NWR_START _NWRDR_CONTROL_CODE(200, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
+#define FSCTL_NWR_STOP _NWRDR_CONTROL_CODE(201, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NWR_LOGON _NWRDR_CONTROL_CODE(202, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NWR_LOGOFF _NWRDR_CONTROL_CODE(203, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NWR_GET_CONNECTION _NWRDR_CONTROL_CODE(204, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_ENUMERATE_CONNECTIONS _NWRDR_CONTROL_CODE(205, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_DELETE_CONNECTION _NWRDR_CONTROL_CODE(207, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NWR_BIND_TO_TRANSPORT _NWRDR_CONTROL_CODE(208, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NWR_CHANGE_PASS _NWRDR_CONTROL_CODE(209, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NWR_SET_INFO _NWRDR_CONTROL_CODE(211, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define FSCTL_NWR_GET_USERNAME _NWRDR_CONTROL_CODE(215, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_CHALLENGE _NWRDR_CONTROL_CODE(216, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_NWR_GET_CONN_DETAILS _NWRDR_CONTROL_CODE(217, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_GET_MESSAGE _NWRDR_CONTROL_CODE(218, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_GET_STATISTICS _NWRDR_CONTROL_CODE(219, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_GET_CONN_STATUS _NWRDR_CONTROL_CODE(220, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_GET_CONN_INFO _NWRDR_CONTROL_CODE(221, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_GET_PREFERRED_SERVER _NWRDR_CONTROL_CODE(222, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_GET_CONN_PERFORMANCE _NWRDR_CONTROL_CODE(223, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_NWR_SET_SHAREBIT _NWRDR_CONTROL_CODE(224, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define FSCTL_NWR_NDS_SETCONTEXT NWR_ANY_NDS(1)
+#define FSCTL_NWR_NDS_GETCONTEXT NWR_ANY_NDS(2)
+#define FSCTL_NWR_NDS_VERIFY_TREE NWR_ANY_NDS(3)
+#define FSCTL_NWR_NDS_RESOLVE_NAME NWR_ANY_NDS(4)
+#define FSCTL_NWR_NDS_LIST_SUBS NWR_ANY_NDS(5)
+#define FSCTL_NWR_NDS_READ_INFO NWR_ANY_NDS(6)
+#define FSCTL_NWR_NDS_READ_ATTR NWR_ANY_NDS(7)
+#define FSCTL_NWR_NDS_OPEN_STREAM NWR_ANY_NDS(8)
+#define FSCTL_NWR_NDS_GET_QUEUE_INFO NWR_ANY_NDS(9)
+#define FSCTL_NWR_NDS_GET_VOLUME_INFO NWR_ANY_NDS(10)
+#define FSCTL_NWR_NDS_RAW_FRAGEX NWR_ANY_NDS(11)
+#define FSCTL_NWR_NDS_CHANGE_PASS NWR_ANY_NDS(12)
+#define FSCTL_NWR_NDS_LIST_TREES NWR_ANY_NDS(13)
+
+#define IOCTL_NWR_RAW_HANDLE _NWRDR_CONTROL_CODE(1002,METHOD_NEITHER, FILE_ANY_ACCESS)
+
+//
+// UserNcp control code definitions. The parameter (X) to NWR_ANY_NCP
+// is the function code to be placed in the NCP.
+//
+
+#define NWR_ANY_NCP(X) _NWRDR_CONTROL_CODE(0x400 | (X), METHOD_NEITHER, FILE_ANY_ACCESS)
+#define NWR_ANY_F2_NCP(X) _NWRDR_CONTROL_CODE(0x500 | (X), METHOD_NEITHER, FILE_ANY_ACCESS)
+#define NWR_ANY_HANDLE_NCP(X) _NWRDR_CONTROL_CODE(0x600 | (X), METHOD_NEITHER, FILE_ANY_ACCESS)
+#define NWR_ANY_NDS(X) _NWRDR_CONTROL_CODE(0x700 | (X), METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define FSCTL_NWR_NCP_E3H NWR_ANY_NCP(0x17)
+#define FSCTL_NWR_NCP_E2H NWR_ANY_NCP(0x16)
+#define FSCTL_NWR_NCP_E1H NWR_ANY_NCP(0x15)
+#define FSCTL_NWR_NCP_E0H NWR_ANY_NCP(0x14)
+
+//
+// Macro for obtaining the parameter given to NWR_ANY_XXX when creating
+// a control code to send a UserNcp to the redirector.
+//
+
+#define ANY_NCP_OPCODE(X) ((UCHAR)(((X) >> 2) & 0x00ff))
+
+//
+// Macro to give the command type
+//
+
+#define IS_IT_NWR_ANY_NCP(X) ((X & 0x1C00) == (0x400 << 2))
+#define IS_IT_NWR_ANY_F2_NCP(X) ((X & 0x1C00) == (0x500 << 2))
+#define IS_IT_NWR_ANY_HANDLE_NCP(X) ((X & 0x1C00) == (0x600 << 2))
+
+//
+// Redirector Request Packet used by the Workstation service
+// to pass parameters to the Redirector through Buffer 1 of
+// NtFsControlFile.
+//
+// Additional output of each FSCtl is found in Buffer 2.
+//
+
+#define REQUEST_PACKET_VERSION 0x00000001L // Structure version.
+
+typedef struct _NWR_REQUEST_PACKET {
+
+ ULONG Version; // Version of structure in Buffer 2
+
+ union {
+
+
+ //
+ // For FSCTL_NWR_BIND_TO_TRANSPORT
+ //
+ struct {
+ ULONG QualityOfService; // Quality of service indicator IN
+ ULONG TransportNameLength; // Not including terminator IN
+ WCHAR TransportName[1]; // Name of transport provider IN
+ } Bind;
+
+
+ //
+ // For FSCTL_NWR_LOGON
+ //
+ struct {
+ LUID LogonId; // User logon session identifier IN
+ ULONG UserNameLength; // Byte count not including NULL IN
+ ULONG PasswordLength; // Byte count not including NULL IN
+ ULONG ServerNameLength; // Byte count not including NULL IN
+ ULONG ReplicaAddrLength; // IPX address of the nearest dir server
+ // replica (for NDS login only).
+ // It's either sizeof(TDI_ADDRESS_IPX)
+ // or 0. IN
+
+ WCHAR UserName[1]; // User name not NULL terminated. IN
+
+ // Password string // Default password for connection,
+ // not NULL terminated, packed
+ // in buffer immediately after
+ // UserName. IN
+
+ // ServerName // Preferred server name packed in
+ // buffer immediately after
+ // Password. IN
+
+ // IpxAddress // Address copied from the SAP response
+ // packet, packed immediately after
+ // the servername. IN
+ } Logon;
+
+ //
+ // For FSCTL_NWR_CHANGE_PASS
+ //
+ struct {
+
+ ULONG UserNameLength;
+ ULONG PasswordLength;
+ ULONG ServerNameLength;
+ WCHAR UserName[1];
+
+ // Password string // New password. IN
+
+ // ServerName // Server with the new password IN
+
+ } ChangePass;
+
+ //
+ // For FSCTL_NWR_LOGOFF
+ //
+ struct {
+ LUID LogonId; // User logon session identifier IN
+ } Logoff;
+
+ //
+ // For FSCTL_NWR_DELETE_CONNECTION
+ //
+ struct {
+ BOOLEAN UseForce; // Force flag IN
+ } DeleteConn;
+
+ //
+ // For FSCTL_NWR_GET_CONNECTION
+ //
+ struct {
+ ULONG BytesNeeded; // Size (byte count) required of
+ // output buffer including
+ // terminator OUT
+ ULONG DeviceNameLength; // Not including terminator IN
+ WCHAR DeviceName[4]; // Name of DOS device IN
+ } GetConn;
+
+ //
+ // FSCTL_NWR_ENUMERATE_CONNECTIONS
+ //
+ struct {
+ ULONG EntriesRequested; // Number of entries to get IN
+ ULONG EntriesReturned; // Entries returned in respose buf OUT
+ ULONG ResumeKey; // Handle to next entry to get IN OUT
+ ULONG BytesNeeded; // Size (byte count) of next entry OUT
+ ULONG ConnectionType; // Resource type requested IN
+ } EnumConn;
+
+ //
+ // FSCTL_NWR_SET_INFO
+ //
+ struct {
+ ULONG PrintOption;
+ ULONG MaximumBurstSize;
+
+ ULONG PreferredServerLength; // Byte count not including NULL IN
+ ULONG ProviderNameLength; // Byte count not including NULL IN
+ WCHAR PreferredServer[1]; // Preferred server name not NULL
+ // terminated.
+ // ProviderName string // Provider name not NULL terminated.
+ // Packed in buffer immediately
+ // after PreferredServer
+
+ } SetInfo;
+
+ //
+ // FSCTL_NWR_GET_CONN_STATUS
+ //
+ struct {
+ ULONG ConnectionNameLength; // IN: Length of the connection name we want.
+ ULONG ResumeKey; // IN: Resume key for a continued request.
+ ULONG EntriesReturned; // OUT: Entries returned in respose buffer.
+ ULONG BytesNeeded; // OUT: Size (byte count) of next entry.
+ WCHAR ConnectionName[1]; // IN: Connection name described above.
+ } GetConnStatus;
+
+ //
+ // FSCTL_NWR_GET_CONN_INFO
+ //
+ struct {
+ ULONG ConnectionNameLength; // IN: Length of the connection name we want.
+ WCHAR ConnectionName[1]; // IN: Connection name described above.
+ } GetConnInfo;
+
+ //
+ // FSCTL_NWR_GET_CONN_PERFORMANCE
+ //
+ struct {
+
+ //
+ // These are the fields for the NETCONNECTINFOSTRUCT.
+ //
+
+ DWORD dwFlags;
+ DWORD dwSpeed;
+ DWORD dwDelay;
+ DWORD dwOptDataSize;
+
+ //
+ // This is the remote name in question.
+ //
+
+ ULONG RemoteNameLength;
+ WCHAR RemoteName[1];
+ } GetConnPerformance;
+
+ struct {
+ ULONG DebugFlags; // Value for NwDebug
+ } DebugValue;
+
+ } Parameters;
+
+} NWR_REQUEST_PACKET, *PNWR_REQUEST_PACKET;
+
+typedef struct _NWR_NDS_REQUEST_PACKET {
+
+ //
+ // Version of structure in Buffer 2.
+ //
+
+ ULONG Version;
+
+ union {
+
+ //
+ // For FSCTL_NWR_NDS_RESOLVE_NAME
+ //
+
+ struct {
+ ULONG ObjectNameLength; // IN
+ DWORD ResolverFlags; // IN
+ DWORD BytesWritten; // OUT
+ WCHAR ObjectName[1]; // IN
+ } ResolveName;
+
+ //
+ // For FSCTL_NWR_NDS_READ_INFO
+ //
+
+ struct {
+ DWORD ObjectId; // IN
+ DWORD BytesWritten; // OUT
+ } GetObjectInfo;
+
+ //
+ // For FSCTL_NWR_NDS_LIST_SUBS
+ //
+
+ struct {
+ DWORD ObjectId; // IN
+ DWORD IterHandle; // IN
+ DWORD BytesWritten; // OUT
+ } ListSubordinates;
+
+ //
+ // For FSCTL_NWR_NDS_READ_ATTR
+ //
+
+ struct {
+ DWORD ObjectId; // IN
+ DWORD IterHandle; // IN
+ DWORD BytesWritten; // OUT
+ DWORD AttributeNameLength; // IN
+ WCHAR AttributeName[1]; // IN
+ } ReadAttribute;
+
+ //
+ // For FSCTL_NWR_NDS_OPEN_STREAM
+ //
+
+ struct {
+ DWORD FileLength; // OUT
+ DWORD StreamAccess; // IN
+ DWORD ObjectOid; // IN
+ UNICODE_STRING StreamName; // IN
+ WCHAR StreamNameString[1]; // IN
+ } OpenStream;
+
+ //
+ // For FSCTL_NWR_NDS_SET_CONTEXT
+ //
+
+ struct {
+ DWORD TreeNameLen ; // IN
+ DWORD ContextLen; // IN
+ WCHAR TreeAndContextString[1]; // IN
+ } SetContext;
+
+ //
+ // For FSCTL_NWR_NDS_GET_CONTEXT
+ //
+
+ struct {
+ UNICODE_STRING Context; // OUT
+ DWORD TreeNameLen ; // IN
+ WCHAR TreeNameString[1]; // IN
+ } GetContext;
+
+ //
+ // For FSCTL_NWR_NDS_VERIFY_TREE
+ //
+
+ struct {
+ UNICODE_STRING TreeName; // IN
+ WCHAR NameString[1]; // IN
+ } VerifyTree;
+
+ //
+ // For FSCTL_NWR_NDS_GET_QUEUE_INFO
+ //
+
+ struct {
+ UNICODE_STRING QueueName; // IN
+ UNICODE_STRING HostServer; // OUT
+ DWORD QueueId; // OUT
+ } GetQueueInfo;
+
+ //
+ // For FSCTL_NWR_NDS_GET_VOLUME_INFO
+ //
+
+ struct {
+ DWORD ServerNameLen; // OUT
+ DWORD TargetVolNameLen; // OUT
+ DWORD VolumeNameLen; // IN
+ WCHAR VolumeName[1]; // IN
+ } GetVolumeInfo;
+
+ //
+ // For FSCTL_NWR_NDS_RAW_FRAGEX
+ //
+
+ struct {
+ DWORD NdsVerb; // IN
+ DWORD RequestLength; // IN
+ DWORD ReplyLength; // OUT
+ BYTE Request[1]; // IN
+ } RawRequest;
+
+ //
+ // For FSCTL_NWR_NDS_CHANGE_PASS
+ //
+
+ struct {
+
+ DWORD NdsTreeNameLength;
+ DWORD UserNameLength;
+ DWORD CurrentPasswordLength;
+ DWORD NewPasswordLength;
+
+ //
+ // The above strings should be end to
+ // end starting at StringBuffer.
+ //
+
+ WCHAR StringBuffer[1];
+ } ChangePass;
+
+ //
+ // For FSCTL_NWR_NDS_LIST_TREES
+ //
+
+ struct {
+
+ DWORD NtUserNameLength; // IN
+ LARGE_INTEGER UserLuid; // OUT
+ DWORD TreesReturned; // OUT
+ WCHAR NtUserName[1]; // IN
+ } ListTrees;
+
+ } Parameters;
+
+} NWR_NDS_REQUEST_PACKET, *PNWR_NDS_REQUEST_PACKET;
+
+//
+// Structure of buffer 2 for FSCTL_NWR_GET_CONNECTION
+//
+typedef struct _NWR_SERVER_RESOURCE {
+ WCHAR UncName[1]; // Server resource name DOS device
+ // is connected to; NULL terminated
+} NWR_SERVER_RESOURCE, *PNWR_SERVER_RESOURCE;
+
+//
+// Structure of buffer for FSCTL_NWR_GET_MESSAGE
+//
+
+typedef struct _NWR_SERVER_MESSAGE {
+ ULONG MessageOffset; // Offset from start of buffer to message
+ WCHAR Server[1]; // Source of message, NUL terminated OUT
+ //WCHAR Message[]; // The message text, NUL terminated OUT
+} NWR_SERVER_MESSAGE, *PNWR_SERVER_MESSAGE;
+
+#define TRANSACTION_VERSION 0x00000001L // Structure version.
+typedef struct _NWR_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).
+} NWR_TRANSACTION, *PNWR_TRANSACTION;
+
+typedef struct _NWR_GET_CONNECTION_DETAILS {
+ SERVERNAME ServerName;
+ UCHAR OrderNumber; // Position in the Scb chain starting at 1
+ UCHAR ServerAddress[12];
+ UCHAR ConnectionNumberLo;
+ UCHAR ConnectionNumberHi;
+ UCHAR MajorVersion;
+ UCHAR MinorVersion;
+ BOOLEAN Preferred;
+} NWR_GET_CONNECTION_DETAILS, *PNWR_GET_CONNECTION_DETAILS;
+
+typedef struct _NWR_GET_USERNAME {
+ WCHAR UserName[1];
+} NWR_GET_USERNAME, *PNWR_GET_USERNAME;
+
+typedef struct _NWR_GET_CHALLENGE_REQUEST {
+ ULONG Flags;
+ ULONG ObjectId;
+ UCHAR Challenge[8];
+ ULONG ServerNameorPasswordLength;
+ WCHAR ServerNameorPassword[1]; // No NULL
+} NWR_GET_CHALLENGE_REQUEST, *PNWR_GET_CHALLENGE_REQUEST;
+
+#define CHALLENGE_FLAGS_SERVERNAME 0
+#define CHALLENGE_FLAGS_PASSWORD 1
+
+typedef struct _NWR_GET_CHALLENGE_REPLY {
+ UCHAR Challenge[8];
+} NWR_GET_CHALLENGE_REPLY, *PNWR_GET_CHALLENGE_REPLY;
+
+//
+// Fields marked FIXFIX are not updated. Remove or record...
+//
+typedef struct _NW_REDIR_STATISTICS {
+ LARGE_INTEGER StatisticsStartTime;
+
+ LARGE_INTEGER BytesReceived;
+ LARGE_INTEGER NcpsReceived;
+
+ LARGE_INTEGER BytesTransmitted;
+ LARGE_INTEGER NcpsTransmitted;
+
+ ULONG ReadOperations;
+ ULONG RandomReadOperations; //FIXFIX
+ ULONG ReadNcps;
+ ULONG PacketBurstReadNcps;
+ ULONG PacketBurstReadTimeouts;
+
+ ULONG WriteOperations;
+ ULONG RandomWriteOperations; //FIXFIX
+ ULONG WriteNcps;
+ ULONG PacketBurstWriteNcps;
+ ULONG PacketBurstWriteTimeouts;
+
+ // Connection/Session counts
+ ULONG Sessions;
+ ULONG FailedSessions;
+ ULONG Reconnects;
+ ULONG NW2xConnects; //FIXFIX
+ ULONG NW3xConnects; //FIXFIX
+ ULONG NW4xConnects; //FIXFIX
+ ULONG ServerDisconnects;
+
+ ULONG CurrentCommands;
+} NW_REDIR_STATISTICS, *PNW_REDIR_STATISTICS;
+
+//
+// CONN_STATUS structures for the new shell.
+//
+
+typedef struct _CONN_STATUS {
+ DWORD dwTotalLength; // The total length including packed strings.
+ LPWSTR pszServerName; // The server name.
+ LPWSTR pszUserName; // The user name.
+ LPWSTR pszTreeName; // The tree name or NULL for a 2.x or 3.x server.
+ DWORD nConnNum; // The connection number used on nw srv.
+ BOOL fNds; // TRUE if NDS, False for Bindery servers
+ BOOL fPreferred; // TRUE if the connection is a preferred server with no explicit uses.
+ DWORD dwConnType; // Authentication status of the connection.
+} CONN_STATUS, *PCONN_STATUS;
+
+#define NW_CONN_NOT_AUTHENTICATED 0x00000000
+#define NW_CONN_BINDERY_LOGIN 0x00000001
+#define NW_CONN_NDS_AUTHENTICATED_NO_LICENSE 0x00000002
+#define NW_CONN_NDS_AUTHENTICATED_LICENSED 0x00000003
+#define NW_CONN_DISCONNECTED 0x00000004
+
+typedef struct _CONN_INFORMATION {
+ DWORD HostServerLength;
+ LPWSTR HostServer;
+ DWORD UserNameLength;
+ LPWSTR UserName;
+} CONN_INFORMATION, *PCONN_INFORMATION;
+
+#endif // ifndef _NTDDNWFS_