summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/ntddbrow.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/sdk/inc/ntddbrow.h448
1 files changed, 448 insertions, 0 deletions
diff --git a/public/sdk/inc/ntddbrow.h b/public/sdk/inc/ntddbrow.h
new file mode 100644
index 000000000..1bf12b52d
--- /dev/null
+++ b/public/sdk/inc/ntddbrow.h
@@ -0,0 +1,448 @@
+/*++ BUILD Version: 0005 // Increment this if a change has global effects
+
+Copyright (c) 1987-1993 Microsoft Corporation
+
+Module Name:
+
+ ntddbrow.h
+
+Abstract:
+
+ This is the include file that defines all constants and types for
+ accessing the datagram receiver device driver, better know as the
+ Browser.
+
+Authors:
+
+ Larry Osterman (larryo) & Rita Wong (ritaw) 25-Mar-1991
+
+Revision History:
+
+--*/
+
+#ifndef _NTDDBROW_
+#define _NTDDBROW_
+
+#include <windef.h>
+#include <lmcons.h>
+#include <lmwksta.h>
+
+//
+// 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_BROWSER_DEVICE_NAME "\\Device\\LanmanDatagramReceiver"
+
+#define DD_BROWSER_DEVICE_NAME_U L"\\Device\\LanmanDatagramReceiver"
+
+//
+// The file system name as returned by
+// NtQueryInformationVolume(FileFsAttributeInformation)
+//
+
+#define DD_BROWSER_NAME "LMBROWSER"
+
+//
+// Name of the event used to force the scavenger thread to announce the
+// server.
+//
+
+#define SERVER_ANNOUNCE_EVENT_W L"\\LanmanServerAnnounceEvent"
+
+#define BOWSER_CONFIG_PARAMETERS L"Parameters"
+
+#define BOWSER_CONFIG_IRP_STACK_SIZE L"IrpStackSize"
+
+#define BOWSER_CONFIG_MAILSLOT_THRESHOLD L"MailslotDatagramThreshold"
+#define BOWSER_CONFIG_GETBLIST_THRESHOLD L"GetBrowserListThreshold"
+
+#define BOWSER_CONFIG_SERVER_DELETION_THRESHOLD L"BrowserServerDeletionThreshold"
+#define BOWSER_CONFIG_DOMAIN_DELETION_THRESHOLD L"BrowserDomainDeletionThreshold"
+#define BOWSER_CONFIG_FIND_MASTER_TIMEOUT L"BrowserFindMasterTimeout"
+#define BOWSER_CONFIG_MINIMUM_CONFIGURED_BROWSER L"BrowserMinimumConfiguredBrowsers"
+#define BROWSER_CONFIG_BACKUP_RECOVERY_TIME L"BackupBrowserRecoveryTime"
+
+
+
+//
+// This defines the revision of the NT browser.
+//
+// To guarantee that a newer browser is preferred over an older version, bump
+// this version number.
+//
+
+#define BROWSER_ELECTION_VERSION 0x0001
+
+#define BROWSER_VERSION_MAJOR 0x01
+#define BROWSER_VERSION_MINOR 0x0F
+
+//
+// Number of seconds a GetBrowserServerList request will wait until it forces
+// an election.
+//
+
+#define BOWSER_GETBROWSERLIST_TIMEOUT 1
+
+//
+// Number of retries of the GetBrowserServerList request we will issue before we
+// give up.
+//
+
+#define BOWSER_GETBROWSERLIST_RETRY_COUNT 3
+
+//
+// The browser service on a master browser will query the driver with this
+// frequency.
+//
+
+#define BROWSER_QUERY_DRIVER_FREQUENCY 30
+
+//
+// NtDeviceIoControlFile 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_DGR_BASE FILE_DEVICE_NETWORK_BROWSER
+
+#define _BROWSER_CONTROL_CODE(request, method, access) \
+ CTL_CODE(IOCTL_DGR_BASE, request, method, access)
+
+#define IOCTL_LMDR_START _BROWSER_CONTROL_CODE(0x001, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_STOP _BROWSER_CONTROL_CODE(0x002, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_LMDR_ADD_NAME _BROWSER_CONTROL_CODE(0x003, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_DELETE_NAME _BROWSER_CONTROL_CODE(0x004, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_ADD_NAME_DOM _BROWSER_CONTROL_CODE(0x003, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_DELETE_NAME_DOM _BROWSER_CONTROL_CODE(0x004, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_LMDR_ENUMERATE_NAMES _BROWSER_CONTROL_CODE(0x005, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_ENUMERATE_SERVERS _BROWSER_CONTROL_CODE(0x006, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_LMDR_BIND_TO_TRANSPORT _BROWSER_CONTROL_CODE(0x007, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_BIND_TO_TRANSPORT_DOM _BROWSER_CONTROL_CODE(0x007, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_LMDR_ENUMERATE_TRANSPORTS _BROWSER_CONTROL_CODE(0x008, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#define IOCTL_LMDR_UNBIND_FROM_TRANSPORT _BROWSER_CONTROL_CODE(0x008, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_UNBIND_FROM_TRANSPORT_DOM _BROWSER_CONTROL_CODE(0x009, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+// Begin Never Used
+#define IOCTL_LMDR_GET_HINT_SIZE _BROWSER_CONTROL_CODE(0x009, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_GET_LOGONSTATUS_REQUEST _BROWSER_CONTROL_CODE(0x00A, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+// End Never Used
+
+#define IOCTL_LMDR_GET_BROWSER_SERVER_LIST _BROWSER_CONTROL_CODE(0x00C, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_GET_MASTER_NAME _BROWSER_CONTROL_CODE(0x00D, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_BECOME_BACKUP _BROWSER_CONTROL_CODE(0x00E, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_BECOME_MASTER _BROWSER_CONTROL_CODE(0x00F, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+// Begin Never Used
+#define IOCTL_LMDR_WAIT_FOR_BROWSER_REQUEST _BROWSER_CONTROL_CODE(0x010, METHOD_BUFFERED, FILE_ANY_ACCESS)
+// End Never Used
+
+#define IOCTL_LMDR_WAIT_FOR_MASTER_ANNOUNCE _BROWSER_CONTROL_CODE(0x011, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_WRITE_MAILSLOT _BROWSER_CONTROL_CODE(0x012, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_UPDATE_STATUS _BROWSER_CONTROL_CODE(0x013, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_CHANGE_ROLE _BROWSER_CONTROL_CODE(0x014, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_NEW_MASTER_NAME _BROWSER_CONTROL_CODE(0x015, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_QUERY_STATISTICS _BROWSER_CONTROL_CODE(0x016, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_RESET_STATISTICS _BROWSER_CONTROL_CODE(0x017, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_DEBUG_CALL _BROWSER_CONTROL_CODE(0x018, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_NETLOGON_MAILSLOT_READ _BROWSER_CONTROL_CODE(0x019, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_NETLOGON_MAILSLOT_ENABLE _BROWSER_CONTROL_CODE(0x020, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_IP_ADDRESS_CHANGED _BROWSER_CONTROL_CODE(0x021, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_LMDR_ENABLE_DISABLE_TRANSPORT _BROWSER_CONTROL_CODE(0x022, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+//
+// Identifies the data structure type for Buffer 2 of each IoCtl
+//
+
+typedef enum _IOCTL_LMDR_STRUCTURES {
+ EnumerateNames, // IOCTL_LMDR_ENUMERATE_NAMES
+ EnumerateServers, // IOCTL_LMDR_ENUMERATE_SERVERS
+ EnumerateXports, // IOCTL_LMDR_ENUMERATE_TRANSPORTS
+ Datagram
+} IOCTL_LMDR_STRUCTURES;
+
+
+typedef enum _DGRECEIVER_NAME_TYPE {
+ ComputerName = 1, // Computer name (signature 0), unique
+ PrimaryDomain, // Primary domain (signature 0), group
+ LogonDomain, // Logon domain (signature 0), group
+ OtherDomain, // Other domain (signature 0), group
+ DomainAnnouncement, // domain announce (__MSBROWSE__), group
+ MasterBrowser, // Master browser (domain name, signature 1d), unique
+ BrowserElection, // Election name (domain name, signature 1e), group
+ BrowserServer, // Server name (signature 20)
+ DomainName, // DC Domain name (domain name, signature 1c)
+ PrimaryDomainBrowser, // PDC Browser name (domain name, signature 1b), unique
+ AlternateComputerName // Computer name (signature 0), unique
+} DGRECEIVER_NAME_TYPE, *PDGRECEIVER_NAME_TYPE;
+
+
+//
+// LAN Man Redirector Request Packet used by the Workstation service
+// to pass parameters to the Redirector through Buffer 1 of
+// NtDeviceIoControlFile.
+//
+// Additional input or output of each IoCtl is found in Buffer 2.
+//
+
+#define LMDR_REQUEST_PACKET_VERSION_DOM 0x00000007L // Structure version.
+#define LMDR_REQUEST_PACKET_VERSION 0x00000006L // Structure version.
+
+typedef struct _LMDR_REQUEST_PACKET {
+
+ IOCTL_LMDR_STRUCTURES Type; // Type of structure in Buffer 2
+ ULONG Version; // Version of structure in Buffer 2
+ ULONG Level; // Level of information or force level
+ LUID LogonId; // User logon session identifier
+
+ UNICODE_STRING TransportName;
+ UNICODE_STRING EmulatedDomainName;
+
+ union {
+
+ struct {
+ ULONG NumberOfMailslotBuffers;
+ ULONG NumberOfServerAnnounceBuffers;
+ ULONG IllegalDatagramThreshold;
+ ULONG EventLogResetFrequency;
+ BOOLEAN LogElectionPackets;
+ } Start; // IN
+
+ struct {
+ DGRECEIVER_NAME_TYPE Type; // Type of name
+ ULONG DgReceiverNameLength; // Length of datagram receiver name
+ WCHAR Name[1]; // Null terminated datagram receiver name.
+ } AddDelName;
+
+ struct {
+ ULONG EntriesRead; // OUT Number of entries returned
+ ULONG TotalEntries; // OUT Total entries available.
+ ULONG TotalBytesNeeded; // OUT Number of bytes needed for API
+ ULONG ResumeHandle; // IN OUT Resume handle
+ } EnumerateNames; // OUT Buffer2 is an array of DGRECEIVE
+
+ struct {
+ ULONG EntriesRead; // OUT Number of entries returned
+ ULONG TotalEntries; // OUT Total entries available
+ ULONG TotalBytesNeeded; // OUT Total bytes needed to read all
+ // entries
+ ULONG ResumeHandle; // IN OUT Resume handle
+ ULONG ServerType; // IN Type of servers to enumerate
+ // (defined in lmserver.h)
+ ULONG DomainNameLength; // IN Length of domain name
+ WCHAR DomainName[1]; // IN Name of domain to enumerate servers
+ // from
+
+ } EnumerateServers; // OUT Buffer2 contains array of
+ // ServerInfo structures
+
+ struct {
+ ULONG EntriesRead; // OUT Number of entries returned
+ ULONG TotalEntries; // OUT Total entries available
+ ULONG TotalBytesNeeded; // OUT Total bytes needed to read all
+ // entries
+ ULONG ResumeHandle; // IN OUT Resume handle
+
+ } EnumerateTransports; // OUT Buffer2 contains array of
+
+ struct {
+ ULONG TransportNameLength; // not including terminator
+ WCHAR TransportName[1]; // Name of transport provider
+ } Bind; // IN
+
+ struct {
+ ULONG TransportNameLength; // not including terminator
+ WCHAR TransportName[1]; // Name of transport provider
+ } Unbind; // IN
+
+// Begin Never Used
+ struct {
+ ULONG ServerInfoHintSize; // Number of bytes needed for buffer
+ // to enumerate servers.
+ ULONG DGReceiverNamesHintSize;
+ // Number of bytes needed for buffer
+ // to enumerate datagram names.
+ } GetHintSize; // OUT
+
+ struct {
+ ULONG MessageLength; // Length of request message in
+ // Buffer2 including opcode
+ WCHAR SenderName[1]; // Null terminated name of logon
+ // request sender
+ } LogonRequest; // OUT
+// End Never Used
+
+ struct {
+ ULONG EntriesRead; // OUT Number of entries returned
+ ULONG TotalEntries; // OUT Total entries available.
+ ULONG TotalBytesNeeded; // OUT Number of bytes needed for API
+ ULONG ResumeHandle; // IN OUT Resume handle (Ignored)
+ USHORT DomainNameLength; // IN Length of domain name.
+ BOOLEAN ForceRescan; // IN Discard internal list and re-query.
+ BOOLEAN UseBrowseList; // IN TRUE if use server list (not net)
+ WCHAR DomainName[1]; // IN Name of domain to retreive domain for
+ } GetBrowserServerList;
+
+// Begin Never Used
+ struct {
+ LARGE_INTEGER TimeReceived; // Time request was received.
+ LARGE_INTEGER TimeQueued; // Time request was queued.
+ LARGE_INTEGER TimeQueuedToBrowserThread; // Time request was queued.
+ ULONG RequestorNameLength; // Length of name requesting list
+ ULONG Token; // Client token.
+ USHORT RequestedCount; // Number of entries requested.
+ WCHAR Name[1]; // IN Name of transport, OUT name of requestor
+ } WaitForBrowserServerRequest;
+// End Never Used
+
+ struct {
+ ULONG MasterNameLength; // Length of name requesting list
+ WCHAR Name[1]; // IN Name of transport, OUT name of master
+ } WaitForMasterAnnouncement;
+
+ struct {
+ ULONG MasterNameLength; // OUT Length of master for domain
+ WCHAR Name[1]; // IN Name of transport, OUT name of master
+ } GetMasterName;
+
+ struct {
+ DGRECEIVER_NAME_TYPE DestinationNameType; // IN Name type of name to send.
+
+ ULONG MailslotNameLength; // IN Length of mailslot name.
+ // If 0, use default (\MAILSLOT\BROWSE)
+ ULONG NameLength; // IN Destination name length.
+ WCHAR Name[1]; // IN Name of destination
+ } SendDatagram;
+
+ struct {
+ ULONG NewStatus;
+ ULONG NumberOfServersInTable;
+ BOOLEAN IsLanmanNt;
+ BOOLEAN IsPrimaryDomainController;
+// Begin Never Used
+ BOOLEAN IsMemberDomain;
+// End Never Used
+ BOOLEAN IsDomainMaster;
+ BOOLEAN MaintainServerList;
+ } UpdateStatus;
+
+ struct {
+ UCHAR RoleModification;
+ } ChangeRole;
+
+ struct {
+ DWORD DebugTraceBits; // IN New debug trace bits.
+ BOOL OpenLog; // IN True if we should open log file
+ BOOL CloseLog; // IN True if we should close log file
+ BOOL TruncateLog; // IN True if we should truncate log
+ WCHAR TraceFileName[1]; // IN If OpenLog, LogFileName (NT file)
+ } Debug;
+
+ struct {
+ DWORD MaxMessageCount; // IN number of netlogon messages to queue
+ } NetlogonMailslotEnable; // Use 0 to disable queuing
+
+ struct {
+ BOOL EnableTransport; // IN True if we should enable transport
+ BOOL PreviouslyEnabled; // Returns if the transport was previously enabled
+ } EnableDisableTransport;
+
+ } Parameters;
+
+} LMDR_REQUEST_PACKET, *PLMDR_REQUEST_PACKET;
+
+//
+// The NETLOGON_MAILSLOT structure describes a mailslot messages received by
+// the browser's IOCTL_LMDR_NETLOGON_MAILSLOT_READ
+//
+// A NETLOGON_MAILSLOT message is also returned to Netlogon when an
+// interesting PNP event occurs. In that case, the fields will be set as
+// follows:
+//
+// MailslotNameSize: 0 indicating this is a PNP event.
+// MailslotNameOffset: One of the NETLOGON_PNP_OPCODEs indicating the
+// event being notified.
+// TransportName*: Name of transport being affected.
+//
+
+typedef enum _NETLOGON_PNP_OPCODE {
+ NlPnpMailslotMessage,
+ NlPnpTransportBind,
+ NlPnpTransportUnbind,
+ NlPnpNewIpAddress
+} NETLOGON_PNP_OPCODE, *PNETLOGON_PNP_OPCODE;
+
+typedef struct {
+ LARGE_INTEGER TimeReceived;
+ DWORD MailslotNameSize; // Unicode name of mailslot message was received on
+ DWORD MailslotNameOffset;
+ DWORD TransportNameSize; // Unicode name of transport message was received on
+ DWORD TransportNameOffset;
+ DWORD MailslotMessageSize;// Actual mailslot message
+ DWORD MailslotMessageOffset;
+ DWORD DestinationNameSize;// Unicode name of computer or domain message was received on
+ DWORD DestinationNameOffset;
+} NETLOGON_MAILSLOT, *PNETLOGON_MAILSLOT;
+
+
+//
+// The DGRECEIVE structure describes the list of names that have been
+// added to the datagram browser.
+//
+
+typedef struct _DGRECEIVE_NAMES {
+ UNICODE_STRING DGReceiverName;
+ DGRECEIVER_NAME_TYPE Type;
+} DGRECEIVE_NAMES, *PDGRECEIVE_NAMES;
+
+
+typedef struct _LMDR_TRANSPORT_LIST {
+ ULONG NextEntryOffset; // Offset of next entry (dword aligned)
+ ULONG TransportNameLength;
+ ULONG Flags; // Flags for transport
+ WCHAR TransportName[1];
+} LMDR_TRANSPORT_LIST, *PLMDR_TRANSPORT_LIST;
+
+#define LMDR_TRANSPORT_WANNISH 0x00000001 // If set, Xport is wannish.
+#define LMDR_TRANSPORT_RAS 0x00000002 // If set, Xport is RAS.
+#define LMDR_TRANSPORT_IPX 0x00000004 // If set, Xport is direct host IPX.
+
+//
+// Browser statistics.
+//
+
+typedef struct _BOWSER_STATISTICS {
+ LARGE_INTEGER StartTime;
+ LARGE_INTEGER NumberOfServerAnnouncements;
+ LARGE_INTEGER NumberOfDomainAnnouncements;
+ ULONG NumberOfElectionPackets;
+ ULONG NumberOfMailslotWrites;
+ ULONG NumberOfGetBrowserServerListRequests;
+ ULONG NumberOfMissedServerAnnouncements;
+ ULONG NumberOfMissedMailslotDatagrams;
+ ULONG NumberOfMissedGetBrowserServerListRequests;
+ ULONG NumberOfFailedServerAnnounceAllocations;
+ ULONG NumberOfFailedMailslotAllocations;
+ ULONG NumberOfFailedMailslotReceives;
+ ULONG NumberOfFailedMailslotWrites;
+ ULONG NumberOfFailedMailslotOpens;
+ ULONG NumberOfDuplicateMasterAnnouncements;
+ LARGE_INTEGER NumberOfIllegalDatagrams;
+} BOWSER_STATISTICS, *PBOWSER_STATISTICS;
+
+#endif // ifndef _NTDDBROW_