summaryrefslogtreecommitdiff
path: root/src/inc/mscorsvc.idl
diff options
context:
space:
mode:
Diffstat (limited to 'src/inc/mscorsvc.idl')
-rw-r--r--src/inc/mscorsvc.idl683
1 files changed, 683 insertions, 0 deletions
diff --git a/src/inc/mscorsvc.idl b/src/inc/mscorsvc.idl
new file mode 100644
index 0000000000..48eada4f6f
--- /dev/null
+++ b/src/inc/mscorsvc.idl
@@ -0,0 +1,683 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+/* -------------------------------------------------------------------------- *
+ * Microsoft .Net Framework Service
+ * -------------------------------------------------------------------------- */
+
+#ifndef IN_MSCOREE
+cpp_quote("#if 0") // So that the outputted header file doesn't cause redefines
+
+import "unknwn.idl";
+
+cpp_quote("#endif")
+
+// CLSID_CorSvcWorker
+cpp_quote("EXTERN_GUID(CLSID_CorSvcWorker, 0x8ed1a844, 0x32a7, 0x4a67, 0xba, 0x62, 0xf8, 0xd5, 0xaf, 0xdf, 0xf4, 0x60);")
+
+// CLSID_CorSvcBindToWorker
+cpp_quote("EXTERN_GUID(CLSID_CorSvcBindToWorker, 0x9f74fb09, 0x4221, 0x40b4, 0xae, 0x21, 0xae, 0xb6, 0xdf, 0xf2, 0x99, 0x4e);")
+
+#pragma midl_echo("STDAPI CorGetSvc(IUnknown **pIUnknown);")
+
+[
+ uuid(d69cca64-16f7-485c-8cf1-67063e44f0c3),
+ version(2.0),
+ helpstring("Common Language Runtime Execution Engine 2.0 Library")
+]
+library mscorsvc
+{
+ importlib("stdole32.tlb");
+
+#endif // IN_MSCOREE
+
+
+ //*****************************************************************************
+ // ICorSvcDependencies is used to enumerate the dependencies of an
+ // IL image. It is used by the native image service.
+ //*****************************************************************************[
+
+ [
+ object,
+ oleautomation,
+ uuid(ddb34005-9ba3-4025-9554-f00a2df5dbf5),
+ pointer_default(unique),
+ ]
+ interface ICorSvcDependencies : IUnknown
+ {
+ HRESULT GetAssemblyDependencies(
+ [in] BSTR pAssemblyName,
+ [out] SAFEARRAY(BSTR) *pDependencies,
+ [out] DWORD *assemblyNGenSetting,
+ [out] BSTR *pNativeImageIdentity,
+ [out] BSTR *pAssemblyDisplayName,
+ [out] SAFEARRAY(DWORD) *pDependencyLoadSetting,
+ [out] SAFEARRAY(DWORD) *pDependencyNGenSetting
+ );
+ }
+
+ //*****************************************************************************
+ // ICorSvcWorker contains methods for generating native images and enumerating
+ // their dependencies.
+ //*****************************************************************************[
+
+ typedef enum
+ {
+ ScenarioDefault = 0x00000000, // No special scenario flags
+ ScenarioAll = 0x00000001, // All scenarios (used to indicate all configurations)
+ ScenarioDebug = 0x00000002, // Unoptimized debuggable code
+ ScenarioProfile = 0x00000008, // Used for profiling (enter/leave notifications)
+ ScenarioTuningDataCollection = 0x00000010, // Used to gather IBC data
+ ScenarioLegacy = 0x00000020, // Follow hard dependencies only
+
+ ScenarioNgenLastRetry = 0x00010000, // Ngen failed last time and this a final retry
+ ScenarioAutoNGen = 0x00100000, // This is an Auto NGen request
+ ScenarioRepositoryOnly = 0x00200000, // Install from repository only, no real NGen
+ } OptimizationScenario;
+
+ typedef enum
+ {
+ ScenarioEmitFixups = 0x00010000, // Emit fixups for Vulcan
+ ScenarioProfileInfo = 0x00020000 // Generate a PE section with profile ranges data
+ } PrivateOptimizationScenario;
+
+ typedef struct _SvcWorkerPriority
+ {
+ DWORD dwPriorityClass;
+ } SvcWorkerPriority;
+
+ [
+ object,
+ oleautomation,
+ uuid(d1047bc2-67c0-400c-a94c-e64446a67fbe),
+ pointer_default(unique),
+ ]
+ interface ICorSvcWorker : IUnknown
+ {
+ HRESULT SetPriority(
+ [in] SvcWorkerPriority priority
+ );
+
+ HRESULT OptimizeAssembly(
+ [in] BSTR pAssemblyName,
+ [in] BSTR pApplicationName,
+ [in] OptimizationScenario scenario,
+ [in] SAFEARRAY(BSTR) loadAlwaysList,
+ [in] SAFEARRAY(BSTR) loadSometimesList,
+ [in] SAFEARRAY(BSTR) loadNeverList,
+ [out] BSTR *pNativeImageIdentity
+ );
+
+ HRESULT DeleteNativeImage(
+ [in] BSTR pAssemblyName,
+ [in] BSTR pNativeImage
+ );
+
+ HRESULT DisplayNativeImages(
+ [in] BSTR pAssemblyName
+ );
+
+ HRESULT GetCorSvcDependencies(
+ [in] BSTR pApplicationName,
+ [in] OptimizationScenario scenario,
+ [out] ICorSvcDependencies **pCorSvcDependencies
+ );
+
+ HRESULT Stop(
+ );
+ }
+
+ [
+ object,
+ oleautomation,
+ uuid(f3358a7d-0061-4776-880e-a2f21b9ef93e),
+ pointer_default(unique),
+ ]
+ interface ICorSvcWorker2 : ICorSvcWorker {
+ // Create a PDB for the NGEN image that was generated for pAssemblyName
+ // when compiled with the given appbase and scenario.
+ HRESULT CreatePdb([in] BSTR pAssemblyName,
+ [in] BSTR pAppBaseOrConfig,
+ [in] OptimizationScenario scenario,
+ [in] BSTR pNativeImagePath,
+ [in] BSTR pPdbPath);
+ };
+
+ [
+ object,
+ oleautomation,
+ uuid(DC516615-47BE-477e-8B55-C5ABE0D76B8F),
+ pointer_default(unique),
+ ]
+ interface ICorSvcWorker3 : ICorSvcWorker2 {
+ // Create a PDB for the NGEN image that was generated for pAssemblyName
+ // when compiled with the given appbase and scenario. Optionally include
+ // source lines information in the geneated PDB
+ HRESULT CreatePdb2([in] BSTR pAssemblyName,
+ [in] BSTR pAppBaseOrConfig,
+ [in] OptimizationScenario scenario,
+ [in] BSTR pNativeImagePath,
+ [in] BSTR pPdbPath,
+ [in] BOOL pdbLines,
+ [in] BSTR managedPdbSearchPath);
+ };
+
+ //*****************************************************************************
+ // ICorSvcSetPrivateAttributes sets private attributes that are used just for
+ // the initial compilation
+ //*****************************************************************************[
+
+ typedef enum
+ {
+ DbgTypePdb = 0x00000001, // Generate a pdb for the NGen image
+ } NGenPrivateAttributesFlags;
+
+ typedef struct _NGenPrivateAttributes
+ {
+ DWORD Flags;
+ DWORD ZapStats;
+ BSTR DbgDir;
+ } NGenPrivateAttributes;
+
+ [
+ object,
+ oleautomation,
+ uuid(b18e0b40-c089-4350-8328-066c668bccc2),
+ pointer_default(unique),
+ ]
+ interface ICorSvcSetPrivateAttributes : IUnknown
+ {
+ HRESULT SetNGenPrivateAttributes(
+ [in] NGenPrivateAttributes ngenPrivateAttributes
+ );
+
+ }
+
+ //*****************************************************************************
+ // ICorSvcRepository controls native images repository
+ //*****************************************************************************[
+
+ typedef enum
+ {
+ RepositoryDefault = 0x0, // default settings
+ MoveFromRepository = 0x1, // move the native images from repository
+ CopyToRepository = 0x2, // copy the generated native images to repository
+ IgnoreRepository = 0x4, // Do not use the repository
+ } RepositoryFlags;
+
+ [
+ object,
+ oleautomation,
+ uuid(d5346658-b5fd-4353-9647-07ad4783d5a0),
+ pointer_default(unique),
+ ]
+ interface ICorSvcRepository : IUnknown
+ {
+ HRESULT SetRepository(
+ [in] BSTR pRepositoryDir,
+ [in] RepositoryFlags repositoryFlags
+ );
+
+ }
+
+#ifdef FEATURE_APPX
+ //*****************************************************************************
+ // ICorSvcAppX contains AppX-related method
+ //*****************************************************************************[
+
+ [
+ object,
+ uuid(5c814791-559e-4f7f-83ce-184a4ccbae24),
+ pointer_default(unique),
+ ]
+ interface ICorSvcAppX : IUnknown
+ {
+ HRESULT SetPackage([in] BSTR pPackageFullName);
+
+ HRESULT SetLocalAppDataDirectory([in] BSTR pLocalAppDataDirectory);
+ }
+#endif
+
+ //*****************************************************************************
+ // ICorSvcLogger is used to log various messages to the service process
+ //*****************************************************************************[
+
+ typedef enum CorSvcLogLevel
+ {
+ LogLevel_Error,
+ LogLevel_Warning,
+ LogLevel_Success,
+ LogLevel_Info
+ } CorSvcLogLevel;
+
+ [
+ object,
+ oleautomation,
+ uuid(d189ff1a-e266-4f13-9637-4b9522279ffc),
+ pointer_default(unique),
+ ]
+ interface ICorSvcLogger : IUnknown
+ {
+ HRESULT Log(
+ [in] CorSvcLogLevel logLevel,
+ [in] BSTR message
+ );
+ }
+
+ //*****************************************************************************
+ // ICorSvcPooledWorker is used to determine whether a worker process can be
+ // reused
+ //*****************************************************************************[
+
+ [
+ object,
+ oleautomation,
+ uuid(0631e7e2-6046-4fde-8b6d-a09b64fda6f3),
+ pointer_default(unique),
+ ]
+ interface ICorSvcPooledWorker : IUnknown
+ {
+ HRESULT CanReuseProcess(
+ [in] OptimizationScenario scenario,
+ [in] ICorSvcLogger *pCorSvcLogger,
+ [out] BOOL *pCanContinue
+ );
+ }
+
+
+ //*****************************************************************************
+ // ICorSvcBindToWorker is used to bind to a specific runtime version.
+ //*****************************************************************************[
+
+
+ [
+ object,
+ oleautomation,
+ uuid(5c6fb596-4828-4ed5-b9dd-293dad736fb5),
+ pointer_default(unique),
+ ]
+ interface ICorSvcBindToWorker : IUnknown
+ {
+ HRESULT BindToRuntimeWorker(
+ [in] BSTR pRuntimeVersion,
+ [in] DWORD ParentProcessID,
+ [in] BSTR pInterruptEventName,
+ [in] ICorSvcLogger *pCorSvcLogger,
+ [out] ICorSvcWorker **pCorSvcWorker
+ );
+ }
+
+#ifndef IN_MSCOREE
+}
+
+typedef enum
+{
+ Service_NoAction = -1 ,
+ Service_Start = 0x0, // start service
+ Service_Stop = 0x1, // Stop service
+ Service_Pause = 0x2, // pause service
+ Service_Continue = 0x3, // continue a paused service
+ Service_Interrogate = 0x4, // continue a paused service
+ Service_StartPaused = 0x5, // pause service. start and pause if it's stopped
+} ControlServiceAction;
+
+// Haven't seen a better way of doing this. Everybody seems to be duplicating
+// into IDLs (for example wtypes.idl)
+typedef struct _COR_SERVICE_STATUS
+{
+ WCHAR sServiceName[64];
+ DWORD dwServiceType;
+ DWORD dwCurrentState;
+ DWORD dwControlsAccepted;
+ DWORD dwWin32ExitCode;
+ DWORD dwServiceSpecificExitCode;
+ DWORD dwCheckPoint;
+ DWORD dwWaitHint;
+} COR_SERVICE_STATUS, *LPCOR_SERVICE_STATUS;
+
+/* -------------------------------------------------------------------------- *
+ * ICorSvc is implemented by the service dispatcher and contains APIs
+ * for installing/uninstalling/starting/stopping the native image service,
+ * as well as marshaling logic that provides the ICorOptSvcManager interface.
+ * -------------------------------------------------------------------------- */
+typedef struct _ServiceOptions
+{
+ BOOL RunAsWindowsService;
+ BOOL RunAsPrivateRuntime;
+ BOOL StartPaused;
+} ServiceOptions;
+
+
+[
+ object,
+ uuid(3eef5ff0-3680-4f20-8a8f-9051aca66b22),
+ pointer_default(unique),
+]
+interface ICorSvc : IUnknown
+{
+ HRESULT GetServiceManagerInterface(
+ [in] IUnknown **pIUnknown
+ );
+
+ HRESULT InstallService(
+ );
+
+ HRESULT UninstallService(
+ );
+
+ HRESULT ControlService(
+ [in] ControlServiceAction Action,
+ [out] LPCOR_SERVICE_STATUS lpServiceStatus
+ );
+
+ HRESULT RunService(
+ [in] ServiceOptions options
+ );
+}
+
+[
+ object,
+ uuid(01c10030-6c81-4671-bd51-14b184c673b2),
+ pointer_default(unique),
+]
+interface ICompileProgressNotification : IUnknown
+{
+ // Notify the installer that compilation has started, and give it an
+ // estimation of how long it will take.
+ HRESULT CompileStarted(
+ [in] DWORD cAssembliesToCompile,
+ [in] DWORD cTimeEstimate
+ );
+
+ // Notify the installer that one more assembly has been compiled. The
+ // installer can return E_ABORT from ProgressNotification if it wants to
+ // abort the compilation.
+ HRESULT ProgressNotification(
+ [in] DWORD cAssembly,
+ [in] BSTR pAssemblyName,
+ [in] BOOL isStartNotification, // if TRUE: we're starting to compile, if FALSE, we finished
+ [in] HRESULT hrResult,
+ [in] BSTR errorExplanation,
+ [in] DWORD cTimeRemainingEstimate
+ );
+
+
+}
+
+/*
+ * Ndp v4 interface that provides a threadID in notification messages
+ */
+[
+ object,
+ uuid(98E5BDE2-E9A0-4ADE-9CB2-6CD06FDB1A85),
+ pointer_default(unique),
+]
+interface ICompileProgressNotification2 : IUnknown
+{
+ // Notify the installer that compilation has started, and give it an
+ // estimation of how long it will take.
+ HRESULT CompileStarted(
+ [in] DWORD cAssembliesToCompile,
+ [in] DWORD cTimeEstimate,
+ [in] DWORD threadID
+ );
+
+ // Notify the installer that one more assembly has been compiled. The
+ // installer can return E_ABORT from ProgressNotification if it wants to
+ // abort the compilation.
+ HRESULT ProgressNotification(
+ [in] DWORD cAssembly,
+ [in] BSTR pAssemblyName,
+ [in] BOOL isStartNotification, // if TRUE: we're starting to compile, if FALSE, we finished
+ [in] HRESULT hrResult,
+ [in] BSTR errorExplanation,
+ [in] DWORD cTimeRemainingEstimate,
+ [in] DWORD threadID
+ );
+
+
+}
+
+typedef enum
+{
+ DefaultOptimizeFlags = 0x0, // default settings
+ TolerateCompilationFailures = 0x1, // continue after encoutering compilation failures
+ OptimizeNGenQueueOnly = 0x2 // only take work items from the NGen Queue
+} OptimizeFlags;
+
+
+[
+ object,
+ uuid(0523feee-eb0e-4857-b2aa-db787521d077),
+ pointer_default(unique),
+]
+interface ICorSvcInstaller : IUnknown
+{
+ HRESULT Install(
+ [in] BSTR path
+ );
+
+ HRESULT Uninstall(
+ [in] BSTR path
+ );
+
+ HRESULT Optimize(
+ [in] ICompileProgressNotification *pCompileProgressNotification,
+ [in] OptimizeFlags optimizeFlags
+ );
+
+ HRESULT SetLogger(
+ [in] ICorSvcLogger *pCorSvcLogger
+ );
+}
+
+typedef enum
+{
+ DefaultFlags = 0x0, // default settings
+ AllowPartialNames = 0x1, // input path allows partial names
+ KeepPriority = 0x2, // keep priority after ngen completes
+ NoRoot = 0x4, // Do not persist NGen root (automatically initiated NGen)
+} GeneralFlags;
+
+typedef enum
+{
+ Priority_None = -1,
+ Priority_0 = 0x0, // NGen offline queue. Do not use for anything else
+ Priority_1 = 0x1,
+ Priority_2 = 0x2,
+ Priority_3 = 0x3, // If you add or remove priorities, update Priority_Lowest
+
+ Priority_Default = Priority_3,
+ Priority_Lowest = Priority_3,
+ Priority_LowestAggressive = Priority_2, // The lowest priority for which assemblies are compiled aggressively
+ Priority_Highest = Priority_0,
+ Priority_Highest_Root = Priority_1,
+ Priority_Lowest_Root = Priority_3
+} PriorityLevel;
+
+
+/* -------------------------------------------------------------------------- *
+ * ICorSvcAdvancedInstaller is implemented by the service manager and
+ * used by installers with custom install requirements
+ * such as special scenarios or hosting requirements).
+ * -------------------------------------------------------------------------- */
+
+[
+ object,
+ uuid(0871fb80-3ea0-47cc-9b51-d92e2aee75db),
+ pointer_default(unique),
+]
+interface ICorSvcAdvancedInstaller : IUnknown
+{
+ HRESULT Install(
+ [in] BSTR path,
+ [in] OptimizationScenario optScenario,
+ [in] BSTR config,
+ [in] GeneralFlags generalFlags,
+ [in] PriorityLevel priorityLevel
+ );
+
+ HRESULT Uninstall(
+ [in] BSTR path,
+ [in] OptimizationScenario optScenario,
+ [in] BSTR config,
+ [in] GeneralFlags generalFlags
+ );
+}
+
+
+/* -------------------------------------------------------------------------- *
+ * ICorSvcOptimizer is implemented by the service manager and is called
+ * by installers and other tools to repair the native image caches.
+ * -------------------------------------------------------------------------- */
+
+typedef enum
+{
+ UpdateDefault = 0x0, // no hints about the scope of the update
+ Force = 0x1, // force generation of new native images
+ PostReboot = 0x2 // Update must happen after reboot
+} UpdateFlags;
+
+
+[
+ object,
+ uuid(94af0ec4-c10d-45d4-a625-d68d1b02a396),
+ pointer_default(unique),
+]
+interface ICorSvcOptimizer : IUnknown
+{
+ // Optimize the native image for a given application or assembly (will regenerate
+ // native images that are out of date)
+ HRESULT Update(
+ [in] BSTR path,
+ [in] UpdateFlags updateFlags,
+ [in] GeneralFlags generalFlags
+ );
+
+ HRESULT Display(
+ [in] BSTR path,
+ [in] GeneralFlags generalFlags
+ );
+
+ HRESULT ScheduleWork(
+ [in] PriorityLevel priorityLevel
+ );
+}
+
+[
+ object,
+ uuid(ee3b09c2-0110-4b6e-a73f-a3d6562f98ab),
+ pointer_default(unique)
+]
+interface ICorSvcOptimizer2 : ICorSvcOptimizer {
+ // generate a PDB for the given native image
+ HRESULT CreatePdb([in] BSTR nativeImagePath, [in] BSTR pdbPath);
+}
+
+[
+ object,
+ uuid(6EED164F-61EE-4a07-ABE8-670F92B4B7A9),
+ pointer_default(unique)
+]
+interface ICorSvcOptimizer3 : ICorSvcOptimizer2 {
+ // generate a PDB for the given native image, optionally including source lines info
+ HRESULT CreatePdb2([in] BSTR nativeImagePath, [in] BSTR pdbPath, [in] BOOL pdbLines, [in] BSTR managedPdbSearchPath);
+}
+
+typedef enum
+{
+ NewWorkAvailable = 0x0, // Notify the service that there is new work to do.
+ ClientWorkStart = 0x1, // Notify the service that there is client starting to do work.
+ ClientWorkDone = 0x2, // Notify the service that the client is done doing work.
+ UpdatePostReboot = 0x3, // Notify the service that it should do an 'ngen update' after reboot
+ NewWorkAvailableWithDelay = 0x4, // Like NewWorkAvailable, but service should wait a while before working
+} ServiceNotification;
+
+
+/* -------------------------------------------------------------------------- *
+ * ICorSvcManager is implemented by the service manager and used by
+ * the service controller in balancing the need to generate native images
+ * with the desire to not interfere with the usage of the computer.
+ * -------------------------------------------------------------------------- */
+[
+ object,
+ uuid(8f416a48-d663-4a7e-9732-fbca3fc46ea8),
+ pointer_default(unique),
+]
+interface ICorSvcManager : IUnknown
+{
+ // Schedule work only for selected priority level
+ HRESULT ScheduleWorkForSinglePriorityLevel(
+ [in] PriorityLevel priorityLevel,
+ [in] BSTR pInterruptEventName,
+ [out] BOOL* pWorkScheduled
+ );
+
+ // Do scheduled work
+ HRESULT Optimize(
+ [in] DWORD dwWorkerPriorityClass,
+ [in] ICompileProgressNotification *pCompileProgressNotification,
+ [in] BSTR pInterruptEventName
+ );
+
+ // Notify the service of new work
+ HRESULT NotifyService(ServiceNotification notification);
+
+ HRESULT IsWorkAvailable ([in] PriorityLevel priorityLevel,
+ [out] BOOL* pWorkAvailable);
+
+ HRESULT Update(
+ [in] UpdateFlags updateFlags,
+ [in] BSTR pInterruptEventName
+ );
+
+ HRESULT SetSvcLogger(
+ [in] ICorSvcLogger *pCorSvcLogger
+ );
+}
+
+[
+ object,
+ uuid(29626056-8031-441b-affa-7a82480058b3),
+ pointer_default(unique),
+]
+interface ICorSvcManager2 : IUnknown
+{
+ HRESULT SetRuntimeVersion(BSTR version);
+
+ HRESULT SetPackageMoniker(BSTR moniker);
+
+ HRESULT SetLocalAppData(BSTR directory);
+}
+
+[
+ object,
+ uuid(35e5d609-ec3d-4fc2-9ba2-5f99e42ff42f),
+ pointer_default(unique),
+]
+interface ICorSvcSetLegacyServiceBehavior : IUnknown
+{
+ HRESULT SetLegacyServiceBehavior();
+}
+
+[
+ object,
+ uuid(115466A4-7005-4CA3-971F-01F0A2C8EF09),
+ pointer_default(unique),
+]
+interface ICorSvcSetTaskBootTriggerState : IUnknown
+{
+ HRESULT SetTaskBootTriggerState(BOOL bEnabled);
+}
+
+[
+ object,
+ uuid(261DD1E3-F07E-4B8D-B54E-F26889413626),
+ pointer_default(unique),
+]
+interface ICorSvcSetTaskDelayStartTriggerState : IUnknown
+{
+ HRESULT SetTaskDelayStartTriggerState(BOOL bEnabled);
+}
+
+#endif // IN_MSCOREE