WindowsXP-SP1/base/screg/winreg/regrpc.idl
2020-09-30 16:53:49 +02:00

829 lines
18 KiB
Plaintext

/*++
Copyright(c) 1992 Microsoft Corporation
Module Name:
Regrpc.idl
Abstract:
This module contains the MIDL definitions for the Win32 Registry
service.
Author:
David J. Gilman (davegi) 27-Jan-1992
--*/
//
// Interface Attributes
//
[
uuid( 338CD001-2244-31F1-AAAA-900038001003 ),
pointer_default( unique ),
#ifdef __midl
ms_union,
#endif // __midl
version( 1.0 )
]
//
// Interface Keyword
//
interface winreg
//
// Interface Body
//
{ // Start of interface definition
import "imports.idl";
//
// Context handle for registry keys.
//
typedef [context_handle] HKEY RPC_HKEY;
typedef RPC_HKEY *PRPC_HKEY;
//
// Server name, binding handles.
//
typedef [handle] PWCHAR PREGISTRY_SERVER_NAME;
//
// RPCable security structures (see winbase.h).
//
typedef struct _RPC_SECURITY_DESCRIPTOR {
[ size_is( cbInSecurityDescriptor ), length_is( cbOutSecurityDescriptor ) ] PBYTE lpSecurityDescriptor;
DWORD cbInSecurityDescriptor;
DWORD cbOutSecurityDescriptor;
} RPC_SECURITY_DESCRIPTOR, *PRPC_SECURITY_DESCRIPTOR;
typedef struct _RPC_SECURITY_ATTRIBUTES {
DWORD nLength;
RPC_SECURITY_DESCRIPTOR RpcSecurityDescriptor;
BOOLEAN bInheritHandle;
} RPC_SECURITY_ATTRIBUTES, *PRPC_SECURITY_ATTRIBUTES;
//
// Local function prototypes.
//
[local]
LONG
ClosePredefinedHandle(
[ in ] RPC_HKEY Handle
);
[local]
BOOL
CleanupPredefinedHandles(
);
[local]
BOOL
InitializeWinreg(
);
[local]
RPC_HKEY
MapPredefinedHandle(
[ in ] RPC_HKEY Handle,
[ out ] PRPC_HKEY phToClose
);
[local]
LONG
RemapPredefinedHandle(
[in] RPC_HKEY Handle,
[in] RPC_HKEY NewHandle
);
[local]
LONG
MapSAToRpcSA(
[ in ] LPSECURITY_ATTRIBUTES lpSA,
[ out ] PRPC_SECURITY_ATTRIBUTES pRpcSA
);
[local]
LONG
MapSDToRpcSD(
[ in ] PSECURITY_DESCRIPTOR lpSD,
[ in, out ] PRPC_SECURITY_DESCRIPTOR pRpcSD
);
[local]
LONG
OpenPredefinedKeyForSpecialAccess(
[ in ] RPC_HKEY Handle,
[ in ] REGSAM AccessMask,
[ out ] PRPC_HKEY pKey
);
//
// Perflib pseudo APIs. Signatures should mirror the real server
// (i.e.Base...) functions.
//
[local]
LONG
PerfRegCloseKey (
[ in, out ] PRPC_HKEY hKey
);
[local]
LONG
PerfRegEnumKey (
[ in ] RPC_HKEY hKey,
[ in ] DWORD dwIndex,
[ in, out ] PUNICODE_STRING lpName,
[ in, out, unique ] LPDWORD lpReserved,
[ in, out, unique ] PUNICODE_STRING lpClass,
[ in, out, unique ] PFILETIME lpftLastWriteTime
);
[local]
LONG
PerfRegQueryInfoKey (
[ in ] RPC_HKEY hKey,
[ in, out ] PUNICODE_STRING lpClass,
[ in, out, unique ] LPDWORD lpReserved,
[ out ] LPDWORD lpcSubKeys,
[ out ] LPDWORD lpcbMaxSubKeyLen,
[ out ] LPDWORD lpcbMaxClassLen,
[ out ] LPDWORD lpcValues,
[ out ] LPDWORD lpcbMaxValueNameLen,
[ out ] LPDWORD lpcbMaxValueLen,
[ out ] LPDWORD lpcbSecurityDescriptor,
[ out ] PFILETIME lpftLastWriteTime
);
[local]
LONG
PerfRegQueryValue (
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpValueName,
[ in, out, unique ] LPDWORD lpReserved,
[ in, out, unique ] LPDWORD lpType,
[ in, out, unique, size_is( lpcbData ? *lpcbData : 0 ), length_is ( lpcbLen ? *lpcbLen : 0 ) ] LPBYTE lpData,
[ in, out, unique ] LPDWORD lpcbData,
[ in, out, unique ] LPDWORD lpcbLen
);
[local]
LONG
PerfRegSetValue (
[ in ] RPC_HKEY hKey,
[ in ] LPWSTR lpValueName,
[ in ] DWORD Reserved,
[ in ] DWORD dwType,
[ in, size_is( cbData )] LPBYTE lpData,
[ in ] DWORD cbData
);
[local]
LONG
PerfRegEnumValue (
[ in ] RPC_HKEY hKey,
[ in ] DWORD dwIndex,
[ in, out ] PUNICODE_STRING lpValueName,
[ in, out, unique ] LPDWORD lpReserved,
[ in, out, unique ] LPDWORD lpType,
[ in, out, unique, size_is( lpcbData ? *lpcbData : 0 ), length_is ( lpcbLen ? *lpcbLen : 0 ) ] LPBYTE lpData,
[ in, out, unique ] LPDWORD lpcbData,
[ in, out, unique ] LPDWORD lpcbLen
);
//
// RegNotifyChangeKeyValue support functions.
//
[local]
BOOL
MakeSemiUniqueName(
[ out ] PUNICODE_STRING Name,
[ in ] DWORD Sequence
);
[local]
BOOL
InitializeRegNotifyChangeKeyValue(
);
[local]
BOOL
CleanDeadClientInfo(
HKEY hKey
);
[local]
BOOL
CleanupRegNotifyChangeKeyValue(
);
//
//******
//
// Local versions of server functions. Make sure these stay in synch
// with the remote (ssrver) versions below.
//
//******
//
//
// RPC stubs for opening predefined handles.
//
[local]
error_status_t
LocalOpenClassesRoot(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
[local]
error_status_t
LocalOpenCurrentUser(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
[local]
error_status_t
LocalOpenLocalMachine(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
[local]
error_status_t
LocalOpenUsers(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
[local]
error_status_t
LocalOpenPerformanceData(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
[local]
error_status_t
LocalOpenCurrentConfig(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
[local]
error_status_t
LocalOpenDynData(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
//
// API (server) function prototypes.
//
[local]
error_status_t
LocalBaseRegCloseKey(
[ in, out ] PRPC_HKEY hKey
);
[local]
error_status_t
LocalBaseRegCreateKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey,
[ in ] PUNICODE_STRING lpClass,
[ in ] DWORD dwOptions,
[ in ] REGSAM samDesired,
[ in, unique ] PRPC_SECURITY_ATTRIBUTES lpSecurityAttributes,
[ out ] PRPC_HKEY phkResult,
[ in, out, unique ] LPDWORD lpdwDisposition
);
[local]
error_status_t
LocalBaseRegDeleteKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey
);
[local]
error_status_t
LocalBaseRegDeleteValue(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpValueName
);
[local]
error_status_t
LocalBaseRegEnumKey(
[ in ] RPC_HKEY hKey,
[ in ] DWORD dwIndex,
[ in, out ] PUNICODE_STRING lpName,
[ in, out, unique ] PUNICODE_STRING lpClass,
[ in, out, unique ] PFILETIME lpftLastWriteTime
);
[local]
error_status_t
LocalBaseRegEnumValue (
[ in ] RPC_HKEY hKey,
[ in ] DWORD dwIndex,
[ in, out ] PUNICODE_STRING lpValueName,
[ in, out, unique ] LPDWORD lpType,
[ in, out, unique, size_is( lpcbData ? *lpcbData : 0 ), length_is ( lpcbLen ? *lpcbLen : 0 ) ] LPBYTE lpData,
[ in, out, unique ] LPDWORD lpcbData,
[ in, out, unique ] LPDWORD lpcbLen
);
[local]
error_status_t
LocalBaseRegFlushKey(
[ in ] RPC_HKEY hKey
);
[local]
error_status_t
LocalBaseRegGetKeySecurity(
[ in ] RPC_HKEY hKey,
[ in ] SECURITY_INFORMATION SecurityInformation,
[ in, out ] PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptor
);
[local]
error_status_t
LocalBaseRegLoadKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey,
[ in ] PUNICODE_STRING lpFile
);
[local]
error_status_t
LocalBaseRegNotifyChangeKeyValue(
[ in ] RPC_HKEY hKey,
[ in ] BOOLEAN bWatchSubtree,
[ in ] DWORD dwNotifyFilter,
[ in ] DWORD hEvent,
[ in ] PUNICODE_STRING MachineName,
[ in ] PUNICODE_STRING PipeName,
[ in, unique ] PRPC_SECURITY_ATTRIBUTES pRpcSecurityAttributes
);
[local]
error_status_t
LocalBaseRegOpenKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey,
[ in ] DWORD dwOptions,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phkResult
);
[local]
error_status_t
LocalBaseRegQueryInfoKey(
[ in ] RPC_HKEY hKey,
[ in, out ] PUNICODE_STRING lpClass,
[ out ] LPDWORD lpcSubKeys,
[ out ] LPDWORD lpcbMaxSubKeyLen,
[ out ] LPDWORD lpcbMaxClassLen,
[ out ] LPDWORD lpcValues,
[ out ] LPDWORD lpcbMaxValueNameLen,
[ out ] LPDWORD lpcbMaxValueLen,
[ out ] LPDWORD lpcbSecurityDescriptor,
[ out ] PFILETIME lpftLastWriteTime
);
[local]
error_status_t
LocalBaseRegQueryValue(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpValueName,
[ in, out, unique ] LPDWORD lpType,
[ in, out, unique, size_is( lpcbData ? *lpcbData : 0 ), length_is ( lpcbLen ? *lpcbLen : 0 ) ] LPBYTE lpData,
[ in, out, unique ] LPDWORD lpcbData,
[ in, out, unique ] LPDWORD lpcbLen
);
[local]
error_status_t
LocalBaseRegQueryMultipleValues(
[ in ] RPC_HKEY hKey,
[ in, out, size_is(num_vals), length_is(num_vals) ] PRVALENT val_list,
[ in ] DWORD num_vals,
[ in, out, unique, size_is(*ldwTotsize), length_is(*ldwTotsize) ] LPSTR lpvalueBuf,
[ in, out, ref ] LPDWORD ldwTotsize
);
[local]
error_status_t
LocalBaseRegReplaceKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey,
[ in ] PUNICODE_STRING lpNewFile,
[ in ] PUNICODE_STRING lpOldFile
);
[local]
error_status_t
LocalBaseRegRestoreKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpFile,
[ in ] DWORD Flags
);
[local]
error_status_t
LocalBaseRegSaveKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpFile,
[ in, unique ] PRPC_SECURITY_ATTRIBUTES pSecurityAttributes
);
[local]
error_status_t
LocalBaseRegSetKeySecurity(
[ in ] RPC_HKEY hKey,
[ in ] SECURITY_INFORMATION SecurityInformation,
[ in ] PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptor
);
[local]
error_status_t
LocalBaseRegSetValue(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpValueName,
[ in ] DWORD dwType,
[ in, size_is( cbData )] LPBYTE lpData,
[ in ] DWORD cbData
);
[local]
error_status_t
LocalBaseRegUnLoadKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey
);
//
//******
//
// Remote versions of server functions. Make sure these stay in synch
// with the local versions above.
//
//******
//
//
// RPC stubs for opening predefined handles.
//
error_status_t
OpenClassesRoot(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
error_status_t
OpenCurrentUser(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
error_status_t
OpenLocalMachine(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
error_status_t
OpenPerformanceData(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
error_status_t
OpenUsers(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
//
// API (server) function prototypes.
//
error_status_t
BaseRegCloseKey(
[ in, out ] PRPC_HKEY hKey
);
error_status_t
BaseRegCreateKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey,
[ in ] PUNICODE_STRING lpClass,
[ in ] DWORD dwOptions,
[ in ] REGSAM samDesired,
[ in, unique ] PRPC_SECURITY_ATTRIBUTES lpSecurityAttributes,
[ out ] PRPC_HKEY phkResult,
[ in, out, unique ] LPDWORD lpdwDisposition
);
error_status_t
BaseRegDeleteKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey
);
error_status_t
BaseRegDeleteValue(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpValueName
);
error_status_t
BaseRegEnumKey(
[ in ] RPC_HKEY hKey,
[ in ] DWORD dwIndex,
[ in, out ] PUNICODE_STRING lpName,
[ in, out, unique ] PUNICODE_STRING lpClass,
[ in, out, unique ] PFILETIME lpftLastWriteTime
);
error_status_t
BaseRegEnumValue (
[ in ] RPC_HKEY hKey,
[ in ] DWORD dwIndex,
[ in, out ] PUNICODE_STRING lpValueName,
[ in, out, unique ] LPDWORD lpType,
[ in, out, unique, size_is( lpcbData ? *lpcbData : 0 ), length_is ( lpcbLen ? *lpcbLen : 0 ) ] LPBYTE lpData,
[ in, out, unique ] LPDWORD lpcbData,
[ in, out, unique ] LPDWORD lpcbLen
);
error_status_t
BaseRegFlushKey(
[ in ] RPC_HKEY hKey
);
error_status_t
BaseRegGetKeySecurity(
[ in ] RPC_HKEY hKey,
[ in ] SECURITY_INFORMATION SecurityInformation,
[ in, out ] PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptor
);
error_status_t
BaseRegLoadKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey,
[ in ] PUNICODE_STRING lpFile
);
error_status_t
BaseRegNotifyChangeKeyValue(
[ in ] RPC_HKEY hKey,
[ in ] BOOLEAN bWatchSubtree,
[ in ] DWORD dwNotifyFilter,
[ in ] DWORD hEvent,
[ in ] PUNICODE_STRING MachineName,
[ in ] PUNICODE_STRING PipeName,
[ in, unique ] PRPC_SECURITY_ATTRIBUTES pRpcSecurityAttributes
);
error_status_t
BaseRegOpenKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey,
[ in ] DWORD dwOptions,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phkResult
);
error_status_t
BaseRegQueryInfoKey(
[ in ] RPC_HKEY hKey,
[ in, out ] PUNICODE_STRING lpClass,
[ out ] LPDWORD lpcSubKeys,
[ out ] LPDWORD lpcbMaxSubKeyLen,
[ out ] LPDWORD lpcbMaxClassLen,
[ out ] LPDWORD lpcValues,
[ out ] LPDWORD lpcbMaxValueNameLen,
[ out ] LPDWORD lpcbMaxValueLen,
[ out ] LPDWORD lpcbSecurityDescriptor,
[ out ] PFILETIME lpftLastWriteTime
);
error_status_t
BaseRegQueryValue(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpValueName,
[ in, out, unique ] LPDWORD lpType,
[ in, out, unique, size_is( lpcbData ? *lpcbData : 0 ), length_is ( lpcbLen ? *lpcbLen : 0 ) ] LPBYTE lpData,
[ in, out, unique ] LPDWORD lpcbData,
[ in, out, unique ] LPDWORD lpcbLen
);
error_status_t
BaseRegReplaceKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey,
[ in ] PUNICODE_STRING lpNewFile,
[ in ] PUNICODE_STRING lpOldFile
);
error_status_t
BaseRegRestoreKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpFile,
[ in ] DWORD Flags
);
error_status_t
BaseRegSaveKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpFile,
[ in, unique ] PRPC_SECURITY_ATTRIBUTES pSecurityAttributes
);
error_status_t
BaseRegSetKeySecurity(
[ in ] RPC_HKEY hKey,
[ in ] SECURITY_INFORMATION SecurityInformation,
[ in ] PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptor
);
error_status_t
BaseRegSetValue(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpValueName,
[ in ] DWORD dwType,
[ in, size_is( cbData )] LPBYTE lpData,
[ in ] DWORD cbData
);
error_status_t
BaseRegUnLoadKey(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpSubKey
);
//
// Shutdown APIs.
//
ULONG
BaseInitiateSystemShutdown(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in, unique ] PUNICODE_STRING lpMessage,
[ in ] DWORD dwTimeout,
[ in ] BOOLEAN bForceAppsClosed,
[ in ] BOOLEAN bRebootAfterShutdown
);
ULONG
BaseAbortSystemShutdown(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName
);
//
// New Remote Registry APIs for Chicago
//
error_status_t
BaseRegGetVersion(
[ in ] RPC_HKEY hKey,
[ out ] LPDWORD lpdwVersion
);
error_status_t
OpenCurrentConfig(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
error_status_t
OpenDynData(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
error_status_t
BaseRegQueryMultipleValues(
[ in ] RPC_HKEY hKey,
[ in, out, size_is(num_vals), length_is(num_vals) ] PRVALENT val_list,
[ in ] DWORD num_vals,
[ in, out, unique, size_is(*ldwTotsize), length_is(*ldwTotsize) ] LPSTR lpvalueBuf,
[ in, out, ref ] LPDWORD ldwTotsize
);
//
// Dragos Sambotin (dragoss) 01/07/1999 - Moved at the end to persist compatibility with NT4 !
// New Shutdown API .
//
ULONG
BaseInitiateSystemShutdownEx(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in, unique ] PUNICODE_STRING lpMessage,
[ in ] DWORD dwTimeout,
[ in ] BOOLEAN bForceAppsClosed,
[ in ] BOOLEAN bRebootAfterShutdown,
[ in ] DWORD dwReason
);
[local]
BOOL
ShutdownWinreg(
);
//
// needed for setup in order to save hives in %systemroot%\system32 in the latest format
//
error_status_t
BaseRegSaveKeyEx(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpFile,
[ in, unique ] PRPC_SECURITY_ATTRIBUTES pSecurityAttributes,
[ in ] DWORD Flags
);
[local]
error_status_t
LocalBaseRegSaveKeyEx(
[ in ] RPC_HKEY hKey,
[ in ] PUNICODE_STRING lpFile,
[ in, unique ] PRPC_SECURITY_ATTRIBUTES pSecurityAttributes,
[ in ] DWORD Flags
);
//
// Adding support for HKEY_PERFORMANCE_TEXT and HKEY_PERFORMANCE_NLSTEXT over remote connections
//
[local]
error_status_t
LocalOpenPerformanceText(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
[local]
error_status_t
LocalOpenPerformanceNlsText(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
error_status_t
OpenPerformanceText(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
error_status_t
OpenPerformanceNlsText(
[ in, unique ] PREGISTRY_SERVER_NAME ServerName,
[ in ] REGSAM samDesired,
[ out ] PRPC_HKEY phKey
);
} // End of interface defintion