Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

294 lines
8.6 KiB

#ifndef _sceExts_h_
#define _sceExts_h_
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <ntsdexts.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
#include <tstr.h>
#include "secedit.h"
typedef enum _SECURITY_DB_TYPE {
SecurityDbSam = 1,
SecurityDbLsa
} SECURITY_DB_TYPE, *PSECURITY_DB_TYPE;
typedef struct _WELL_KNOWN_NAME_LOOKUP {
PWSTR StrSid;
WCHAR Name[36];
} WELL_KNOWN_NAME_LOOKUP, *PWELL_KNOWN_NAME_LOOKUP;
#define NAME_TABLE_SIZE 31
#include <ntseapi.h>
#include <ntlsa.h>
#include <ntsam.h>
#include <winldap.h>
#include <aclapi.h>
#include <dsrole.h>
#include "splay.h"
#include "..\server\queue.h"
#include "..\server\scejetp.h"
#include "..\server\scep.h"
typedef struct _SCESRV_CONTEXT_LIST_ {
PSCECONTEXT Context;
struct _SCESRV_CONTEXT_LIST_ *Next;
struct _SCESRV_CONTEXT_LIST_ *Prior;
} SCESRV_CONTEXT_LIST;
typedef struct _SCESRV_DBTASK_ {
PSCECONTEXT Context;
CRITICAL_SECTION Sync;
DWORD dInUsed;
BOOL bCloseReq;
struct _SCESRV_DBTASK_ *Next;
struct _SCESRV_DBTASK_ *Prior;
} SCESRV_DBTASK;
typedef struct _SCESRV_ENGINE_ {
LPTSTR Database;
struct _SCESRV_ENGINE_ *Next;
struct _SCESRV_ENGINE_ *Prior;
} SCESRV_ENGINE;
typedef struct _SCEP_NOTIFYARGS_NODE {
LIST_ENTRY List;
SECURITY_DB_TYPE DbType;
SECURITY_DB_DELTA_TYPE DeltaType;
SECURITY_DB_OBJECT_TYPE ObjectType;
PSID ObjectSid;
} SCEP_NOTIFYARGS_NODE;
#define SCEP_ADL_HTABLE_SIZE 256
typedef struct _SCEP_ADL_NODE_ {
PISID pSid;
GUID *pGuidObjectType;
GUID *pGuidInheritedObjectType;
UCHAR AceType;
DWORD dwEffectiveMask;
DWORD dw_CI_IO_Mask;
DWORD dw_OI_IO_Mask;
DWORD dw_NP_CI_IO_Mask;
struct _SCEP_ADL_NODE_ *Next;
} SCEP_ADL_NODE, *PSCEP_ADL_NODE;
//#define DbgPrint(_x_) (lpOutputRoutine) _x_
#define DbgPrint(_x_)
#define MAX_NAME 256
#define DebuggerOut (lpOutputRoutine)
#define GET_DATA(DebugeeAddr, LocalAddr, Length) \
Status = ReadProcessMemory( \
GlobalhCurrentProcess, \
(LPVOID)DebugeeAddr, \
LocalAddr, \
Length, \
NULL \
);
//
// This macro copies a string from the debuggee
// process, one character at a time into this
// process's address space.
//
// CODEWORK: This macro should check the length
// to make sure we don't overflow the LocalAddr
// buffer. Perhaps this should be a function
// rather than a macro.
//
#define GET_STRING(DebugeeAddr, LocalAddr, Length) \
\
{ \
WCHAR UnicodeChar; \
LPWSTR pDest; \
LPWSTR pSource; \
pDest = LocalAddr; \
pSource = DebugeeAddr; \
do { \
\
Status = ReadProcessMemory( \
GlobalhCurrentProcess, \
(LPVOID)pSource, \
&UnicodeChar, \
sizeof(WCHAR), \
NULL \
); \
\
*pDest = UnicodeChar; \
pDest++; \
pSource++; \
} while (UnicodeChar != L'\0');}
#define GET_DWORD(str) \
{ \
dwValue = 0; \
pvAddr = (PVOID)(lpGetExpressionRoutine)(str); \
if ( pvAddr) { \
\
GET_DATA( pvAddr, (LPVOID)&dwValue, sizeof(DWORD)); \
\
} else { \
DebuggerOut("\tFail to get address of %s\n", str); \
dwValue = (DWORD)-1; \
} \
}
//
// globals
//
extern HANDLE GlobalhCurrentProcess;
extern BOOL Status;
//=======================
// Function Prototypes
//=======================
extern PNTSD_OUTPUT_ROUTINE lpOutputRoutine;
extern PNTSD_GET_EXPRESSION lpGetExpressionRoutine;
extern PNTSD_CHECK_CONTROL_C lpCheckControlCRoutine;
#define NAME_BASE_SRV "scesrv"
#define NAME_BASE_CLI "scecli"
//
// common for both DLLs
//
#define SCEEXTS_PRIVILEGE_LIST "SCE_Privileges"
#define SCEEXTS_WELLKNOWN_NAMES "NameTable"
//
// client only
//
#define SCEEXTS_CLIENT_SETUPDB NAME_BASE_CLI "!hSceSetupHandle"
#define SCEEXTS_CLIENT_PREFIX NAME_BASE_CLI "!szCallbackPrefix"
#define SCEEXTS_CLIENT_PRODUCT NAME_BASE_CLI "!dwThisMachine"
#define SCEEXTS_CLIENT_UPD_FILE NAME_BASE_CLI "!szUpInfFile"
#define SCEEXTS_CLIENT_ISNT5 NAME_BASE_CLI "!bIsNT5"
#define SCEEXTS_CLIENT_NOTIFY_ROLE NAME_BASE_CLI "!MachineRole"
#define SCEEXTS_CLIENT_NOTIFY_ROLEQUERY NAME_BASE_CLI "!bRoleQueried"
#define SCEEXTS_CLIENT_NOTIFY_ROLEFLAG NAME_BASE_CLI "!DsRoleFlags"
#define SCEEXTS_CLIENT_NOTIFY_COUNT NAME_BASE_CLI "!SceNotifyCount"
#define SCEEXTS_CLIENT_NOTIFY_ACTIVE NAME_BASE_CLI "!gSceNotificationThreadActive"
#define SCEEXTS_CLIENT_NOTIFY_LIST NAME_BASE_CLI "!ScepNotifyList"
#define SCEEXTS_CLIENT_POLICY_ASYNC NAME_BASE_CLI "!gbAsyncWinlogonThread"
#define SCEEXTS_CLIENT_POLICY_HRSRSOP NAME_BASE_CLI "!gHrSynchRsopStatus"
#define SCEEXTS_CLIENT_POLICY_HRARSOP NAME_BASE_CLI "!gHrAsynchRsopStatus"
#define SCEEXTS_CLIENT_POLICY_ISDC NAME_BASE_CLI "!gbThisIsDC"
#define SCEEXTS_CLIENT_POLICY_DCQUERY NAME_BASE_CLI "!gbDCQueried"
#define SCEEXTS_CLIENT_POLICY_DomName NAME_BASE_CLI "!gpwszDCDomainName"
//
// server only
//
#define SCEEXTS_POLICY_QUEUE_LOG NAME_BASE_SRV "!gdwNotificationLog"
#define SCEEXTS_POLICY_QUEUE_PRODUCT_QUERY NAME_BASE_SRV "!bQueriedProductTypeForNotification"
#define SCEEXTS_POLICY_QUEUE_PRODUCT NAME_BASE_SRV "!ProductTypeForNotification"
#define SCEEXTS_POLICY_QUEUE_SUSPEND NAME_BASE_SRV "!gbSuspendQueue"
#define SCEEXTS_POLICY_QUEUE_HEAD NAME_BASE_SRV "!pNotificationQHead"
#define SCEEXTS_POLICY_QUEUE_TAIL NAME_BASE_SRV "!pNotificationQTail"
#define SCEEXTS_POLICY_QUEUE_COUNT NAME_BASE_SRV "!gdwNumNotificationQNodes"
#define SCEEXTS_POLICY_QUEUE_RETRY NAME_BASE_SRV "!gdwNumNotificationQRetryNodes"
#define SCEEXTS_SERVER_OPEN_CONTEXT NAME_BASE_SRV "!pOpenContexts"
#define SCEEXTS_SERVER_DB_CONTEXT NAME_BASE_SRV "!pDbTask"
#define SCEEXTS_SERVER_ENGINE NAME_BASE_SRV "!pEngines"
#define SCEEXTS_SERVER_JET_INSTANCE NAME_BASE_SRV "!JetInstance"
#define SCEEXTS_SERVER_JET_INIT NAME_BASE_SRV "!JetInited"
VOID
SceExtspDumpSplayNodes(
IN PVOID pvAddr,
IN PVOID pvSentinel,
IN SCEP_NODE_VALUE_TYPE Type
);
VOID
SceExtspDumpQueueNode(
IN PVOID pvAddr,
IN BOOL bOneNode
);
VOID
SceExtspReadDumpSID(
IN LPSTR szPrefix,
IN PSID pSid
);
VOID
SceExtspDumpNotificationInfo(
IN SECURITY_DB_TYPE DbType,
IN SECURITY_DB_OBJECT_TYPE ObjectType,
IN SECURITY_DB_DELTA_TYPE DeltaType
);
VOID
SceExtspDumpADLNodes(
IN PVOID pvAddr
);
VOID
SceExtspDumpGUID(
IN GUID *pGUID
);
VOID
SceExtspGetNextArgument(
IN OUT LPSTR *pszCommand,
OUT LPSTR *pArg,
OUT DWORD *pLen
);
VOID
SceExtspDumpObjectTree(
IN PVOID pvAddr,
IN DWORD Level,
IN DWORD Count,
IN PWSTR wszName,
IN BOOL bDumpSD
);
VOID
SceExtspReadDumpSD(
IN SECURITY_INFORMATION SeInfo,
IN PVOID pvSD,
IN LPSTR szPrefix
);
VOID
SceExtspReadDumpNameList(
IN PVOID pvAddr,
IN LPSTR szPrefix
);
VOID
SceExtspReadDumpObjectSecurity(
IN PVOID pvAddr,
IN LPSTR szPrefix
);
#endif