From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- private/inc/svcs.h | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 private/inc/svcs.h (limited to 'private/inc/svcs.h') diff --git a/private/inc/svcs.h b/private/inc/svcs.h new file mode 100644 index 000000000..45e40b796 --- /dev/null +++ b/private/inc/svcs.h @@ -0,0 +1,207 @@ +/*++ + +Copyright (c) 1990 Microsoft Corporation + +Module Name: + + svcs.h + +Abstract: + + This file contains definitions used by service dlls that share + a process in the system. The SERVICES.EXE process is an example of + a user of these definitions. + + +Author: + + Rajen Shah rajens 12-Apr-1991 + +[Environment:] + + User Mode - Win32 + +Revision History: + + 25-Oct-1993 Danl + Used to be services.h in the net\inc directory. + Made it non-network specific and moved to private\inc. + + 12-Apr-1991 RajenS + Created + +--*/ +#ifndef _SVCS_ +#define _SVCS_ + +#ifndef RPC_NO_WINDOWS_H // Don't let rpc.h include windows.h +#define RPC_NO_WINDOWS_H +#endif // RPC_NO_WINDOWS_H + +#include // RPC_IF_HANDLE + +// +// Service DLLs loaded into services.exe all export the same main +// entry point. SVCS_ENTRY_POINT defines that name. +// +// Note that SVCS_ENTRY_POINT_STRING is always ANSI, because that's +// what GetProcAddress takes. +// + +#define SVCS_ENTRY_POINT ServiceEntry +#define SVCS_ENTRY_POINT_STRING "ServiceEntry" + +// +// Name for the common RPC pipe shared by all the RPC servers in services.exe. +// Note: Because version 1.0 of WinNt had seperate names for each server's +// pipe, the client side names have remained the same. Mapping to the new +// name is handled by the named pipe file system. +// +#define SVCS_RPC_PIPE L"ntsvcs" + +// +// Flags indicating how a work item is to be operated upon. +// SVC_QUEUE_WORK_ITEM - This indicates that the work item should be +// placed in the work queue to be operated upon when a worker +// thread becomes available. +// SVC_IMMEDIATE_CALLBACK - This indicates that the Watcher Thread +// should make the callback and return the response prior to +// returning from this call to SvcAddWorkItem. This allows +// asynchronous I/O events to be setup in the context of the +// Watcher Thread, which never goes away. If the service had +// a worker thread setup the async I/O operation, the operation +// would become signalled as soon as the worker thread was +// terminated. I/O is terminated when the requesting thread +// goes away. +// +#define SVC_QUEUE_WORK_ITEM 0x00000001 +#define SVC_IMMEDIATE_CALLBACK 0x00000002 + +// +// Start and stop RPC server entry point prototype. +// + +typedef +DWORD +(*PSVCS_START_RPC_SERVER) ( + IN LPTSTR InterfaceName, + IN RPC_IF_HANDLE InterfaceSpecification + ); + +typedef +DWORD +(*PSVCS_STOP_RPC_SERVER) ( + IN RPC_IF_HANDLE InterfaceSpecification + ); + +typedef +VOID +(*PSVCS_NET_BIOS_OPEN) ( + VOID + ); + +typedef +VOID +(*PSVCS_NET_BIOS_CLOSE) ( + VOID + ); + +typedef +DWORD +(*PSVCS_NET_BIOS_RESET) ( + IN UCHAR LanAdapterNumber + ); + +// +// Thread Management +// + +typedef +DWORD +(*PSVCS_WORKER_CALLBACK) ( + IN PVOID pContext, + IN DWORD dwWaitStatus + ); + +// +// Call this function to add a work item +typedef +HANDLE +(*PSVCS_ADD_WORK_ITEM) ( + IN HANDLE hWaitableObject, + IN PSVCS_WORKER_CALLBACK pCallbackFunction, + IN PVOID pContext, + IN DWORD dwFlags, + IN DWORD dwTimeout, + IN HANDLE hDllReference + ); + +// +// Call this function to remove a work item. +typedef +BOOL +(*PSVCS_REMOVE_WORK_ITEM) ( + IN HANDLE hWorkItem + ); + + +// +// Structure containing "global" data for the various DLLs. +// + +typedef struct _SVCS_GLOBAL_DATA { + + // + // NT well-known SIDs + // + + PSID NullSid; // No members SID + PSID WorldSid; // All users SID + PSID LocalSid; // NT local users SID + PSID NetworkSid; // NT remote users SID + PSID LocalSystemSid; // NT system processes SID + PSID BuiltinDomainSid; // Domain Id of the Builtin Domain + + // + // Well Known Aliases. + // + // These are aliases that are relative to the built-in domain. + // + + PSID AliasAdminsSid; // Administrator Sid + PSID AliasUsersSid; // User Sid + PSID AliasGuestsSid; // Guest Sid + PSID AliasPowerUsersSid; // Power User Sid + PSID AliasAccountOpsSid; // Account Operator Sid + PSID AliasSystemOpsSid; // System Operator Sid + PSID AliasPrintOpsSid; // Print Operator Sid + PSID AliasBackupOpsSid; // Backup Operator Sid + + // + // Entry points provided by SERVICES.EXE. + // + + PSVCS_START_RPC_SERVER StartRpcServer; + PSVCS_STOP_RPC_SERVER StopRpcServer; + PSVCS_NET_BIOS_OPEN NetBiosOpen; + PSVCS_NET_BIOS_CLOSE NetBiosClose; + PSVCS_NET_BIOS_RESET NetBiosReset; + LPWSTR SvcsRpcPipeName; + PSVCS_ADD_WORK_ITEM SvcsAddWorkItem; + PSVCS_REMOVE_WORK_ITEM SvcsRemoveWorkItem; +} SVCS_GLOBAL_DATA, *PSVCS_GLOBAL_DATA; + +// +// Service DLL entry point prototype. +// + +typedef +VOID +(*PSVCS_SERVICE_DLL_ENTRY) ( + IN DWORD argc, + IN LPTSTR argv[], + IN PSVCS_GLOBAL_DATA pGlobalData, + IN HANDLE SvcReferenceHandle + ); + +#endif // ndef _SVCS_ -- cgit v1.2.3