330 lines
7.2 KiB
C
330 lines
7.2 KiB
C
/*++
|
|
|
|
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 <dsgetdc.h> // 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_
|