test: cm.h Source File

Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

# cm.h

Go to the documentation of this file.

    00001 /*++ BUILD Version: 0001    // Increment this if a change has global effects
    00002
    00003 Copyright (c) 1989  Microsoft Corporation
    00004
    00005 Module Name:
    00006
    00007     cm.h
    00008
    00009 Abstract:
    00010
    00011     This module contains the internal structure definitions and APIs
    00012     used by the NT configuration management system, including the
    00013     registry.
    00014
    00015 Author:
    00016
    00017     Bryan M. Willman (bryanwi)  28-Aug-91
    00018
    00019
    00020 Revision History:
    00021
    00022
    00023 --*/
    00024
    00025 #ifndef _CM_
    00026 #define _CM_
    00027
    00028 //
    00029 // Define Names used to access the regsitry
    00030 //
    00031
    00032 extern UNICODE_STRING CmRegistryRootName;            // \REGISTRY
    00033 extern UNICODE_STRING CmRegistryMachineName;         // \REGISTRY\MACHINE
    00034 extern UNICODE_STRING CmRegistryMachineHardwareName; // \REGISTRY\MACHINE\HARDWARE
    00035 extern UNICODE_STRING CmRegistryMachineHardwareDescriptionName;
    00036                             // \REGISTRY\MACHINE\HARDWARE\DESCRIPTION
    00037 extern UNICODE_STRING CmRegistryMachineHardwareDescriptionSystemName;
    00038                             // \REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM
    00039 extern UNICODE_STRING CmRegistryMachineHardwareDeviceMapName;
    00040                             // \REGISTRY\MACHINE\HARDWARE\DEVICEMAP
    00041 extern UNICODE_STRING CmRegistryMachineHardwareResourceMapName;
    00042                             // \REGISTRY\MACHINE\HARDWARE\RESOURCEMAP
    00043 extern UNICODE_STRING CmRegistryMachineHardwareOwnerMapName;
    00044                             // \REGISTRY\MACHINE\HARDWARE\OWNERMAP
    00045 extern UNICODE_STRING CmRegistryMachineSystemName;
    00046                             // \REGISTRY\MACHINE\SYSTEM
    00047 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSet;
    00048                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET
    00049 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetEnumName;
    00050                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\ENUM
    00051 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetEnumRootName;
    00052                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\ENUM\ROOT
    00053 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetServices;
    00054                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES
    00055 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetHardwareProfilesCurrent;
    00056                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\HARDWARE PROFILES\CURRENT
    00057 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlClass;
    00058                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\CONTROL\CLASS
    00059 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlSafeBoot;
    00060                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\CONTROL\SAFEBOOT
    00061 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlSessionManagerMemoryManagement;
    00062                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\CONTROL\SESSION MANAGER\MEMORY MANAGEMENT
    00063 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlBootLog;
    00064                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\CONTROL\BOOTLOG
    00065 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetServicesEventLog;
    00066                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES\EVENTLOG
    00067 extern UNICODE_STRING CmRegistryUserName;            // \REGISTRY\USER
    00068
    00069 #ifdef _WANT_MACHINE_IDENTIFICATION
    00070
    00071 extern UNICODE_STRING CmRegistryMachineSystemCurrentControlSetControlBiosInfo;
    00072                             // \REGISTRY\MACHINE\SYSTEM\CURRENTCONTROLSET\CONTROL\BIOSINFO
    00073
    00074 #endif
    00075
    00076 //
    00077 // The following strings will be used as the keynames for registry
    00078 // nodes.
    00079 // The associated enumerated type is CONFIGURATION_TYPE in arc.h
    00080 //
    00081
    00082 extern UNICODE_STRING CmTypeName[];
    00083 extern PWSTR CmTypeString[];
    00084
    00085 //
    00086 // CmpClassString - contains strings which are used as the class
    00087 //     strings in the keynode.
    00088 // The associated enumerated type is CONFIGURATION_CLASS in arc.h
    00089 //
    00090
    00091 extern UNICODE_STRING CmClassName[];
    00092 extern PWSTR CmClassString[];
    00093
    00094
    00095 //
    00096 // Define structure of boot driver list.
    00097 //
    00098
    00099 typedef struct _BOOT_DRIVER_LIST_ENTRY {
    00100     LIST_ENTRY Link;
    00101     UNICODE_STRING FilePath;
    00102     UNICODE_STRING RegistryPath;
    00103     PLDR_DATA_TABLE_ENTRY LdrEntry;
    00104 } BOOT_DRIVER_LIST_ENTRY, *PBOOT_DRIVER_LIST_ENTRY;
    00105
    00106 PHANDLE
    00107 CmGetSystemDriverList(
    00108     VOID
    00109     );
    00110
    00111 BOOLEAN
    00112 CmInitSystem1(
    00113     IN PLOADER_PARAMETER_BLOCK LoaderBlock
    00114     );
    00115
    00116 BOOLEAN
    00117 CmInitSystem2(
    00118     );
    00119
    00120 VOID
    00121 CmNotifyRunDown(
    00122     PETHREAD    Thread
    00123     );
    00124
    00125 VOID
    00126 CmShutdownSystem(
    00127     VOID
    00128     );
    00129
    00130 VOID
    00131 CmBootLastKnownGood(
    00132     ULONG ErrorLevel
    00133     );
    00134
    00135
    00136 //
    00137 // Stuctures and definitions for use with CmGetSystemControlValues
    00138 //
    00139
    00140 //
    00141 // NOTES:
    00142 //      KeyPath is relative to currentcontrolset.  So, if the variable
    00143 //      of interest is
    00144 //      "\registry\machine\system\currentcontrolset\control\fruit\apple:x"
    00145 //      the entry is
    00146 //      { L"fruit\\apple",
    00147 //        L"x",
    00148 //        &Xbuffer,
    00149 //        sizeof(ULONG),
    00150 //        &Xtype
    00151 //      }
    00152 //
    00153 //      *BufferLength is available space on input
    00154 //      on output:
    00155 //          -1 = no such key or value
    00156 //          0  = key and value exist, but have 0 length data
    00157 //          > input = buffer too small, filled to available space,
    00158 //                    value is actual size of data in registry
    00159 //          <= input = number of bytes copied out
    00160 //
    00161 typedef struct _CM_SYSTEM_CONTROL_VECTOR {
    00162     PWSTR       KeyPath;                // path name relative to
    00163                                         // current control set
    00164     PWSTR       ValueName;              // name of value entry
    00165     PVOID       Buffer;                 // data goes here
    00166     PULONG      BufferLength;           // IN: space allocated
    00167                                         // OUT: space used, -1 for no such
    00168                                         //      key or value, 0 for key/value
    00169                                         //      found but has 0 length data
    00170                                         // if NULL pointer, assume 4 bytes
    00171                                         // (reg DWORD) available and do not
    00172                                         // report actual size
    00173     PULONG      Type;                   // return type of found data, may
    00174                                         // be NULL
    00175 } CM_SYSTEM_CONTROL_VECTOR, *PCM_SYSTEM_CONTROL_VECTOR;
    00176
    00177 VOID
    00178 CmGetSystemControlValues(
    00179     PVOID                   SystemHiveBuffer,
    00180     PCM_SYSTEM_CONTROL_VECTOR  ControlVector
    00181     );
    00182
    00183 VOID
    00184 CmQueryRegistryQuotaInformation(
    00185     IN PSYSTEM_REGISTRY_QUOTA_INFORMATION RegistryQuotaInformation
    00186     );
    00187
    00188 VOID
    00189 CmSetRegistryQuotaInformation(
    00190     IN PSYSTEM_REGISTRY_QUOTA_INFORMATION RegistryQuotaInformation
    00191     );
    00192
    00193
    00194
    00195 typedef
    00196 VOID
    00197 (*PCM_TRACE_NOTIFY_ROUTINE)(
    00198     IN NTSTATUS Status,
    00199     IN HANDLE KeyHandle,
    00200     IN LONGLONG  ElapsedTime,
    00201     IN PUNICODE_STRING KeyName,
    00202     IN UCHAR Type
    00203     );
    00204
    00205 NTSTATUS
    00206 CmSetTraceNotifyRoutine(
    00207     IN PCM_TRACE_NOTIFY_ROUTINE NotifyRoutine,
    00208     IN BOOLEAN Remove
    00209     );
    00210
    00211
    00212 #endif // _CM_