/*++ Copyright (c) 1987-1992 Microsoft Corporation Module Name: logonp.h Abstract: Private Netlogon service routines useful by both the Netlogon service and others that pass mailslot messages to/from the Netlogon service. Author: Cliff Van Dyke (cliffv) 7-Jun-1991 Environment: User mode only. Contains NT-specific code. Requires ANSI C extensions: slash-slash comments, long external names. Revision History: --*/ #ifndef _LOGONP_H_ #define _LOGONP_H_ #include // PDS_DOMAIN_TRUSTSW // // Message versions returned from NetpLogonGetMessageVersion // #define LMUNKNOWN_MESSAGE 0 // No version tokens on end of message #define LM20_MESSAGE 1 // Just LM 2.0 token on end of message #define LMNT_MESSAGE 2 // LM 2.0 and LM NT token on end of message #define LMUNKNOWNNT_MESSAGE 3 // LM 2.0 and LM NT token on end of // message, but the version is not // supported. #define LMWFW_MESSAGE 4 // LM WFW token on end of message // // Define the token placed in the last two bytes of a LanMan 2.0 message // #define LM20_TOKENBYTE 0xFF // // Define the token placed in the last four bytes of a NT LanMan message // Notice that such a message is by definition a LanMan 2.0 message // #define LMNT_TOKENBYTE 0xFF // // Define the token placed in the next to last byte of the PRIMARY_QUERY // message from newer (8/8/94) WFW and Chicago clients. This byte (followed // by a LM20_TOKENBYTE) indicates the client is WAN-aware and sends the // PRIMARY_QUERY to the DOMAIN<1B> name. As such, BDC on the same subnet need // not respond to this query. // #define LMWFW_TOKENBYTE 0xFE // // Put the LANMAN NT token onto the end of a message. // // The token is always followed by a LM 2.0 token so LM 2.0 systems will // think this message is from a LM 2.0 system. // // Also append a version flag before the NT TOKEN so that the future // versions of software can handle the newer messages effectively. // //Arguments: // // Where - Indirectly points to the current location in the buffer. The // 'String' is copied to the current location. This current location is // updated to point to the byte following the token. // // NtVersion - Additional version information to be or'ed into the NtVersion // field of the message. #define NetpLogonPutNtToken( _Where, _NtVersion ) \ { \ SmbPutUlong( (*_Where), NETLOGON_NT_VERSION_1 | (_NtVersion) ); \ (*_Where) += sizeof(ULONG); \ *((PUCHAR)((*_Where)++)) = LMNT_TOKENBYTE; \ *((PUCHAR)((*_Where)++)) = LMNT_TOKENBYTE; \ NetpLogonPutLM20Token( _Where ); \ } // // Put the LANMAN 2.0 token onto the end of a message. // //Arguments: // // Where - Indirectly points to the current location in the buffer. The // 'String' is copied to the current location. This current location is // updated to point to the byte following the token. #define NetpLogonPutLM20Token( _Where ) \ { \ *((PUCHAR)((*_Where)++)) = LM20_TOKENBYTE; \ *((PUCHAR)((*_Where)++)) = LM20_TOKENBYTE; \ } #define NetpLogonPutGuid( _Guid, _Where ) \ NetpLogonPutBytes( (_Guid), sizeof(GUID), _Where ) #define NetpLogonGetGuid( _Message, _MessageSize, _Where, _Guid ) \ NetpLogonGetBytes( \ (_Message), \ (_MessageSize),\ (_Where), \ sizeof(GUID), \ (_Guid) ) // // Name of binary Forest Trust List file // #define NL_FOREST_BINARY_LOG_FILE L"\\system32\\config\\netlogon.ftl" #define NL_FOREST_BINARY_LOG_FILE_JOIN L"\\system32\\config\\netlogon.ftj" // // Header for binary Forest Trust List file. // typedef struct _DS_DISK_TRUSTED_DOMAIN_HEADER { ULONG Version; } DS_DISK_TRUSTED_DOMAIN_HEADER, *PDS_DISK_TRUSTED_DOMAIN_HEADER; #define DS_DISK_TRUSTED_DOMAIN_VERSION 1 // // Entry for binary Forest Trust List file. // typedef struct _PDS_DISK_TRUSTED_DOMAIN { // // Size of entire entry // ULONG EntrySize; // // Name of the trusted domain. // ULONG NetbiosDomainNameSize; ULONG DnsDomainNameSize; // // Flags defining attributes of the trust. // ULONG Flags; // // Index to the domain that is the parent of this domain. // Only defined if NETLOGON_DOMAIN_IN_FOREST is set and // NETLOGON_DOMAIN_TREE_ROOT is not set. // ULONG ParentIndex; // // The trust type and attributes of this trust. // // If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set, // these value are infered. // ULONG TrustType; ULONG TrustAttributes; // // The SID of the trusted domain. // // If NETLOGON_DOMAIN_DIRECTLY_TRUSTED is not set, // this value will be NULL. // ULONG DomainSidSize; // // The GUID of the trusted domain. // GUID DomainGuid; } DS_DISK_TRUSTED_DOMAINS, *PDS_DISK_TRUSTED_DOMAINS; // // Procedure forwards from logonp.c // VOID NetpLogonPutOemString( IN LPSTR String, IN DWORD MaxStringLength, IN OUT PCHAR * Where ); VOID NetpLogonPutUnicodeString( IN LPWSTR String, IN DWORD MaxStringLength, IN OUT PCHAR * Where ); VOID NetpLogonPutBytes( IN LPVOID Data, IN DWORD Size, IN OUT PCHAR * Where ); DWORD NetpLogonGetMessageVersion( IN PVOID Message, IN PDWORD MessageSize, OUT PULONG Version ); BOOL NetpLogonGetOemString( IN PVOID Message, IN DWORD MessageSize, IN OUT PCHAR *Where, IN DWORD MaxStringLength, OUT LPSTR *String ); BOOL NetpLogonGetUnicodeString( IN PVOID Message, IN DWORD MessageSize, IN OUT PCHAR *Where, IN DWORD MaxStringSize, OUT LPWSTR *String ); BOOL NetpLogonGetBytes( IN PVOID Message, IN DWORD MessageSize, IN OUT PCHAR *Where, IN DWORD DataSize, OUT LPVOID Data ); BOOL NetpLogonGetDBInfo( IN PVOID Message, IN DWORD MessageSize, IN OUT PCHAR *Where, OUT PDB_CHANGE_INFO Data ); LPWSTR NetpLogonOemToUnicode( IN LPSTR Ansi ); LPSTR NetpLogonUnicodeToOem( IN LPWSTR Unicode ); NET_API_STATUS NetpLogonWriteMailslot( IN LPWSTR MailslotName, IN LPVOID Buffer, IN DWORD BufferSize ); // // Define the largest message returned by a mailslot created by // NetpLogonCreateRandomMailslot(). The 64 byte value allows expansion // of the messages in the future. // #define MAX_RANDOM_MAILSLOT_RESPONSE (max(sizeof(NETLOGON_LOGON_RESPONSE), sizeof(NETLOGON_PRIMARY)) + 64 ) NET_API_STATUS NetpLogonCreateRandomMailslot( IN LPSTR path, OUT PHANDLE MsHandle ); VOID NetpLogonPutDomainSID( IN PCHAR Sid, IN DWORD SidLength, IN OUT PCHAR * Where ); BOOL NetpLogonGetDomainSID( IN PVOID Message, IN DWORD MessageSize, IN OUT PCHAR *Where, IN DWORD SIDSize, OUT PCHAR *Sid ); BOOLEAN NetpLogonTimeHasElapsed( IN LARGE_INTEGER StartTime, IN DWORD Timeout ); NET_API_STATUS NlWriteBinaryLog( IN LPWSTR FileSuffix, IN LPBYTE Buffer, IN ULONG BufferSize ); NET_API_STATUS NlWriteFileForestTrustList ( IN LPWSTR FileSuffix, IN PDS_DOMAIN_TRUSTSW ForestTrustList, IN ULONG ForestTrustListCount ); #endif // _LOGONP_H_