1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
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_
|