/*++ 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 ); // // new to .Net server and XP SP1; Fix DoS attack. // [local] error_status_t LocalBaseRegQueryMultipleValues2( [ 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 ] LPDWORD ldwTotsize, [ out ] LPDWORD ldwRequiredSize ); error_status_t BaseRegQueryMultipleValues2( [ 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 ] LPDWORD ldwTotsize, [ out ] LPDWORD ldwRequiredSize ); } // End of interface defintion