Document revision date: 3 November 2000

## OpenVMS Connectivity Developer Guide

Previous | Contents | Index

## Appendix D
Upgrading to COM Version 1.1-B for OpenVMS from COM Version 1.0 for OpenVMS

## D.1 Upgrading from Earlier Versions of COM for OpenVMS

The following sections describe tasks you must complete when upgrading from a previous version of COM for OpenVMS.

### D.1.1 Rebuild Existing COM for OpenVMS Applications

If your COM for OpenVMS applications include references to any of the following APIs, you must recompile the modules that include the references and relink the application:

> `LoadLibraryA`
> `LoadLibraryW`
> `LoadLibraryExW`
> `LoadLibraryExA`
> `GetModuleFileNameA`
> `GetModuleFileNameW`
> `GetModuleHandleW`
> `GetProcAddress`
> `FreeLibrary`

Some sample COM applications that shipped with COM Version 1.0 for OpenVMS include references to these APIs in the modules REGISTRY and CMPNT. If you built any samples, or if you built your own COM applications based on these samples, you should recompile and relink those applications.

### D.1.2 Configuring the Windows NT Systems

For COM Version 1.0 for OpenVMS (unauthenticated COM) the COM for OpenVMS documentation instructed you to change specific values in your Windows NT registry to allow unauthenticated COM for OpenVMS to interoperate with Windows NT. COM Version 1.1-A for OpenVMS and COM Version 1.1-B for OpenVMS support authentication. As a result, you must set or reset the Windows NT Registry values we asked you to change for COM Version 1.0 for OpenVMS back to their default authenticated settings. To set the Windows NT Registry values, use the following procedure:

1. Start the Windows NT Registry editor.
2. Select the following registry key:

       HKEY_LOCAL_MACHINE\Software\Microsoft\Ole

3. Delete the following value names and value data:

   Value name | Recommended COM V1.0 setting | Default (Authenticated) Value data (COM V1.1-B setting) | Registry type
   --- | --- | --- | ---
   `ActivationSecurity` | N | Remove | `REG_SZ`
   `PersonalClasses` | N | Remove | `REG_SZ`

4. Verify the Default Authentication Level and Default Impersonation Level and change if necessary. Use the following procedure:

   Note You must have Windows NT Administrator privileges to view and update these settings.

   1. From the Start menu, choose Run...
   2. In the Run dialog box, enter `dcomcnfg` .
      The system displays the Distributed COM Configuration Properties sheet.
   3. Click the Default Properties tab.
      - The Default Authentication Level list box should display Connect. If it does not, click the list box arrow and select Connect from the list.
      - The Default Impersonation Level list box should display Identity. If it does not, click the list box arrow and select Identity from the list.
5. You must reboot the Windows NT system for these changes to take effect.

### D.1.3 Configuring the OpenVMS System

On OpenVMS systems, you must set or reset the specific OpenVMS Registry values. You can use the Windows NT Registry editor to edit the OpenVMS Registry, or you can use the REG$CP utility. To set the OpenVMS Registry values, use the following procedure:

1. Select the following OpenVMS Registry key:

       HKEY_LOCAL_MACHINE\Software\Microsoft\Ole

2. Delete the `ActivationSecurity` , `PersonalClasses` , `LegacyAuthenticationLevel` , and `LegacyImpersonationLevel` keys. Use the following commands to delete the keys:

       $ MCR REG$CP
       REG> LIST VALUE HKEY_LOCAL_MACHINE\Software\Microsoft\Ole
       REG> DELETE VALUE HKEY_LOCAL_MACHINE\Software\Microsoft\Ole ActivationSecurity
       REG> DELETE VALUE HKEY_LOCAL_MACHINE\Software\Microsoft\Ole PersonalClasses
       REG> DELETE VALUE HKEY_LOCAL_MACHINE\Software\Microsoft\Ole LegacyAuthenticationLevel
       REG> DELETE VALUE HKEY_LOCAL_MACHINE\Software\Microsoft\Ole LegacyImpersonationLevel
       REG> LIST VALUE HKEY_LOCAL_MACHINE\Software\Microsoft\Ole
       REG> EXIT

## D.2 Previously Configured Applications on Windows NT

If you configured an application to run with COM Version 1.0 for OpenVMS (unauthenticated COM for OpenVMS) on Windows NT, you might want to reconfigure the Windows NT settings to take advantage of COM Version 1.1-B for OpenVMS (authenticated COM for OpenVMS).

Under COM Version 1.0 for OpenVMS after you registered a component, the COM for OpenVMS documentation instructed you to check the security properties on that component to ensure that an unauthenticated user can activate the image. Use the following procedure:

1. From the Windows NT Start menu, choose Run...
2. In the Run dialog box, enter `dcomcnfg` .
   The system displays the Distributed COM Configuration Properties sheet.
3. Select the object by name from the Applications list, then click the Properties... button.
   The system displays the property sheet for the selected object.
4. From the property sheet, click the Security tab.
   - For COM Version 1.0 for OpenVMS you had to set the access permissions (Registry value `AccessPermission` ) so that user Everyone was allowed access (Allow access).
     For COM Version 1.1-B for OpenVMS, you can set custom access permissions (Registry value `AccessPermission` ) to a specific user.
     Click Use custom access permissions , then click the Edit button to display the Registry Key Permissions box.
   - For COM Version 1.0 for OpenVMS you had to set the launch permissions (Registry value `LaunchPermission` ) so that user Everyone was allowed to launch the application server (Allow launch).
     For COM Version 1.1-B for OpenVMS, you can set the custom launch permissions (Registry value `LaunchPermission` ) to remove Everyone.
     Click Use custom access permissions , then click the Edit button to display the Registry Key Permissions box.
   - For COM Version 1.0 for OpenVMS you had to set the configuration permissions so that user Everyone was allowed at least Read access to the Registry values.
     For COM Version 1.1-B for OpenVMS, you can set the custom configuration permissions to remove Everyone.
     Click Use custom access permissions , then click the Edit button to display the Registry Key Permissions box.
   Under COM Version 1.0 for OpenVMS after you set security properties, you had to set the identity of the account to run the application.
   For COM Version 1.1-B for OpenVMS, you can set the identity of the account to option 1 or 2.
   Click the Identity tab to display the user account selection. Select The interactive user option.

### D.2.1 You Must Repopulate the OpenVMS Registry for COM Version 1.1-B for OpenVMS

For COM Version 1.1-B for OpenVMS, you must repopulate the OpenVMS Registry to include security settings. Use the DCOM$SETUP command procedure to display the OpenVMS COM Tools menu, and choose option 3.

### D.2.2 Changing Application Security Settings in the OpenVMS Registry

COM Version 1.0 for OpenVMS, which shipped with OpenVMS 7.2, did not support NTLM security. As a result, the OpenVMS account through which you (or the system) registered the COM Version 1.0 for OpenVMS COM application was the owner for any OpenVMS Registry keys created as part of the application registration. For example, using COM Version 1.0 for OpenVMS, if you logged into the SYSTEM account and registered the SAMPLE1 application, all SAMPLE1's OpenVMS Registry keys are owned by SYSTEM.

COM Version 1.1-B for OpenVMS supports NTLM security. The system now uses the network account to control access to the OpenVMS Registry keys. As a result of this change, previous security settings might prevent a nonprivileged user from accessing an application's registry keys. This means that a nonprivileged user working on an existing application might not be able to unregister or reregister an application.

To prevent this registration lockout, you must change the permission of the application. You can change the permission from either the Windows NT system or the OpenVMS system. Use either of the following procedures:

- Changing the permission from a Windows NT system
  1. From a Windows NT system, start RegEdt32.
  2. From the Registry menu, choose Select Computer and connect to the OpenVMS system that contains the OpenVMS Registry.
  3. Select the key associated with the application you want to change.
  4. From the Security menu, choose Permissions... and grant the user Full Control.
  5. Repeat the last two steps for each registry key associated with the application. For a list of COM application-related registry keys, see Section D.2.2.1.
- Changing the permission from an OpenVMS system
  1. Log into a privileged OpenVMS account.
  2. Unregister the application. Use the DCOM$REGSVR32 utility. See Example 6-5.
  3. Delete all registry keys associated with the application. For a list of COM application-related registry keys, see Section D.2.2.1.
  4. Log into the nonprivileged user account.
  5. Register the application. Use the DCOM$REGSVR32 utility (see Example 6-4), or from the OpenVMS COM Tools menu, choose option 6 (see Section 6.2).

#### D.2.2.1 COM Application Registry Keys

A COM application can have several registry keys associated with it. You must be sure to change all keys associated with the application. An application usually registers the following keys:

> `HKEY_CLASSES_ROOT\CLSID\{guid}` and subkeys
> `HKEY_CLASSES_ROOT\APPID\{guid}`
> `HKEY_CLASSES_ROOT\APPID\filename`
> `HKEY_CLASSES_ROOT\TYPELIB\{typelib guid}`
> `HKEY_CLASSES_ROOT\INTERFACES\{interface guid(s)}` and subkeys
> `HKEY_CLASSES_ROOT\name` and subkeys
> `HKEY_CLASSES_ROOT\version independent name` and subkeys

Note `HKEY_CLASSES_ROOT` is an alias for `HKEY_LOCAL_MACHINE\SOFTWARE\Classes` . If you connect to the OpenVMS Registry from Windows NT using Regedt32 and you want to edit the `HKEY_CLASSES_ROOT` key, edit the `HKEY_LOCAL_MACHINE\SOFTWARE\Classes` key.

## Appendix E
Running COM Version 1.1-B for OpenVMS in an Unauthenticated Mode

COM Version 1.1-B for OpenVMS includes an option that allows you to run the software in an unauthenticated environment in which NTLM support is not utilized. If you enable this option, only OpenVMS security semantics are used to control COM applications' access to resources. This is essentially the same behavior as in COM Version 1.0 for OpenVMS.

For a list of security differences between an unauthenticated implementation and an authenticated implementation of COM for OpenVMS, see Table 1-1.

Note When you run COM for OpenVMS in unauthenticated mode, detached processes started by `DCOM$RPCSS` to run COM servers run in the context of the OpenVMS `DCOM$GUEST` account. These detached processes have the security attributes of the `DCOM$GUEST` account.

The following sections describes tasks you must complete in order to run COM for OpenVMS in an unauthenticated environment.

## E.1 Installing COM V1.1-B for OpenVMS to Run in Unauthenticated Mode

If you are installing COM for OpenVMS for the first time, or if you are upgrading from an earlier version, perform the following steps:

- Follow the installation and upgrade procedures described in Chapter 4. Note: You can skip the steps relating to the installation, configuration, and startup of Advanced Server for OpenVMS.
- Follow the configuration procedures in Section E.2 to configure COM for OpenVMS in unauthenticated mode.

The ACME Server process is started automatically by RPC, but it is not required if you are in unauthenticated mode. To cause the ACME Server process to not start when the system reboots, edit the SYLOGICALS.COM file as follows:

    $  DEFINE ACME$TO_BE_STARTED FALSE              ! ACME Server

## E.2 Configuring COM V1.1-B for OpenVMS to Run in Unauthenticated Mode

The following section describes how to configure COM Version 1.1-B for OpenVMS to run in an unauthenticated environment.

Note Before you begin configuring COM for OpenVMS for unauthenticated mode, make a note of your current Windows NT system default values and application settings. This makes returning to authenticated mode easier. (See Section E.5 for information on how to convert from unauthenticated mode to authenticated mode.)

### E.2.1 Define the DCOM$UNAUTHENTICATED Logical Systemwide

Define `DCOM$UNAUTHENTICATED` to be "Y" or "YES" systemwide. If this logical is undefined or defined as any other value, COM V1.1-B for OpenVMS will run in the usual authenticated mode utilizing NTLM security.

To cause COM for OpenVMS to start automatically in unauthenticated mode when the system boots, edit the SYLOGICALS.COM file and add the following line:

    $ DEFINE/SYSTEM DCOM$UNAUTHENTICATED YES

### E.2.2 Populate the OpenVMS Registry

Use option 3 in the `DCOM$SETUP` utility to populate the OpenVMS Registry. (See Section 6.2 for more information.)

Note If you are upgrading from COM V1.1-A for OpenVMS, you do not need to populate the OpenVMS Registry.

### E.2.3 Create the DCOM$GUEST Account

Create the OpenVMS `DCOM$GUEST` account using option 7 in the `DCOM$SETUP` utility. (See Section 6.2 for more information.)

### E.2.4 Create the DCOM$RPCSS Account

Create the OpenVMS `DCOM$RPCSS` account using option 8 in the `DCOM$SETUP` utility. (See Section 6.2 for more information.)

## E.3 Configuring Windows NT to Interoperate with Unauthenticated COM

For COM objects to interoperate correctly between unauthenticated COM V1.1-B for OpenVMS systems and Windows NT, perform the steps described in the following sections. This will configure the COM objects to run without security enabled on the Windows NT system.

### E.3.1 Setting the Windows NT Systemwide Authentication Level

On Windows NT systems, set the systemwide authentication level using this procedure:

1. Run `DCOMCNFG` on the Windows NT system.
2. Select the Default Properties tab.
3. Set the Default Authentication Level to None.

### E.3.2 Setting Windows NT Application Security Properties

After a COM application has been registered, check the security properties on that application to ensure that an unauthenticated user can activate the image.

To do this, perform the following steps:

1. Run `DCOMCNFG` on the Windows NT system.
2. Select the application by name.
3. Click the Properties button.
4. Click the Security tab.

Set the access permissions (Registry value AccessPermission) so that user Everyone is allowed access (Allow access).

Set the launch permissions (Registry value LaunchPermission) so that user Everyone is allowed access (Allow access).

Set the configuration permissions so that user Everyone is allowed at least Read access to the Registry values.

### E.3.3 Setting the Windows NT Application Security Identity

After you set security permissions, you must set the identity of the account to run the application. To do this, click the Identity tab, and select The interactive user.

## E.4 Expected Failures from CLIENTAUTH Sample Program

While you are running COM Version 1.1-B for OpenVMS in unauthenticated mode, the Cross-Domain Security example (CLIENTAUTH) does not work because it requires NTLM authentication to be enabled.

## E.5 Converting from Unauthenticated Mode to Authenticated Mode

If you performed the steps in this appendix to run COM Version 1.1-B for OpenVMS in unauthenticated mode and you now want to return to authenticated mode, perform the following steps.

1. Log in to the SYSTEM account.
2. Stop the COM server. Use option 5 in the `DCOM$SETUP` utility. (See Section 6.2 for more information.)
3. Edit `SYLOGICALS.COM` with the following changes:
   - Undefine the `DCOM$UNAUTHENTICATED` logical by entering:

           $ DEFINE/SYSTEM DCOM$UNAUTHENTICATED NO

   - Comment the following line, as shown:

           $! DEFINE ACME$TO_BE_STARTED FALSE      ! ACME Server

4. Enter the following command:

         $ DEFINE/SYSTEM DCOM$UNAUTHENTICATED NO

5. Install, configure, and start Advanced Server for OpenVMS, if it is not already present.
6. Repopulate the OpenVMS Registry.
   To do this, use option 3 in the `DCOM$SETUP` utility. (See Section 6.2 for more information.)
7. Add the `DCOM$RPCSS` account to include the Advanced Server for OpenVMS account and hostmap. Use option 8 in the `DCOM$SETUP` utility. (See Section 6.2 for more information.)
8. Reset your Windows NT system default values and application settings to the values that were set before you followed the procedure in Section E.3.
9. Start the COM server. Use option 4 in the `DCOM$SETUP` utility. (See Section 6.2 for more information.)
10. Update or add network accounts. (See Section 5.1 for more information.)

## Appendix F
Lists of Differences, APIs, and Interfaces

This appendix contains a list of implementation differences between COM for OpenVMS and Microsoft COM as well as a list of APIs and interfaces provided in this release of COM for OpenVMS.

## F.1 Differences between COM for OpenVMS and Microsoft COM

The following sections list important implementation differences between COM for OpenVMS and Microsoft's COM.

### F.1.1 Service Control Manager (SCM)

OpenVMS does not provide an equivalent to the Windows NT Service Control Manager. As a result, applications that depend on Server services (such as stop, start, pause, and resume) rely on the OpenVMS features that provide similar functionality (if the features are available).

For example, you would use the OpenVMS site-specific startup and shutdown command procedures to implement automatic starting of services at system startup and automatic shutdown of services at system shutdown. Service APIs such as `RegisterServiceCtrlHandler` , `ChangeServiceConfig` , and so on, are not provided on OpenVMS.

### F.1.2 Server Application Stack Size

In COM for OpenVMS, server application functions run in the context of server threads. As a result, server functions have a limited stack space of 48 KB. If you require additional space for local variables or structures, you should allocate dynamic memory for local variables or structures.

### F.1.3 Use of the "char" Datatype

OpenVMS and Windows NT translate the IDL base data type "char" differently.

OpenVMS translates the data type as MIDL_CHAR, which is defined to be CHAR, and further defined to be "char." The OpenVMS compiler by default takes this to be equivalent to "unsigned char;" in most cases they can be used interchangeably. The two are not the same---C++ treats them as different data types you specify them in class member definitions.

Windows NT translates the data type directly as "unsigned char." This causes conflicts with Visual C++, which treats the "char" datatype as equivalent to "signed char." As in OpenVMS, "char" is not the same as "signed char" in class member definitions.

There are two workarounds to this mismatch:

- Use the data type "CHAR" instead of "char" in the IDL file and all member definitions. This is the most portable solution; you can expect this to work on other systems (such as UNIX) as well.
- Conditionally compile the method definitions so that OpenVMS sees the object methods defined as "char" and Windows NT sees the methods defined as "unsigned char."

### F.1.4 MIDL Compiler Version

The MIDL compiler supplied with COM for OpenVMS is based on Microsoft's MIDL compiler V3.00.44.

#### F.1.4.1 The OpenVMS MIDL Compiler

The OpenVMS MIDL compiler is identical to the Microsoft Interface Definition Language (MIDL) compiler V3.00.44 except for the following:

1. The Microsoft MIDL implementation supports several optimization levels. The OpenVMS MIDL implementation supports only `-Oicf` . Do not use any other optimization level.
2. The `/cpp_cmd` and `/cpp_opt` switches are not fully functional in the OpenVMS MIDL implementation.
3. On a Windows NT system, Microsoft MIDL commands, switches, and qualifiers are case sensitive. The OpenVMS MIDL compiler is not case sensitive; all commands, switches, and qualifiers passed to the OpenVMS MIDL compiler are lowercase. As a result, the Microsoft MIDL switches `/I` and `/i` are equivalent on OpenVMS.
4. MIDL-generated files are platform specific.
   You must run MIDL on both platforms. The MIDL output files generated on one platform (OpenVMS or Windows NT) cannot be copied and used on the other platform.
5. MIDL `-w` switch
   The Microsoft MIDL compiler allows you to specify either `-w` or `-warn` to limit the level of warnings generated by the compiler. The OpenVMS MIDL compiler supports only the `-w` switch.

### F.1.5 Using DCOM$CNFG to Change Application Configuration Permission

Use the Application Security Submenu options 5 and 6 to change the OpenVMS Registry key permissions of some keys associated with an application. Option 5 and 6 affect the security settings of the following keys:

> `HKEY_CLASSES_ROOT\APPID\{guid}`
> `HKEY_CLASSES_ROOT\CLSID\{guid}` and subkeys

On Windows NT systems, the security settings of the subkeys under `HKEY_CLASSES_ROOT\CLSID\{guid}` are changed only if the existing security settings match the original settings of `HKEY_CLASSES_ROOT\APPID\{guid}` .

On OpenVMS systems, the settings of the subkeys are changed even if the existing settings do not match the original settings of `HKEY_CLASSES_ROOT\APPID\{guid}` .

Options 5 and 6 do not change the settings of all keys associated with an application. For example, options 5 and 6 do not affect the following keys:

> `HKEY_CLASSES_ROOT\APPID\filename`
> `HKEY_CLASSES_ROOT\TYPELIB\{typelib guid}`
> `HKEY_CLASSES_ROOT\INTERFACES\{interface guid(s)}` and subkeys.
> `HKEY_CLASSES_ROOT\name` and subkeys
> `HKEY_CLASSES_ROOT\version independent name` and subkeys

To change the security settings of these keys, use the following procedure:

1. From a Windows NT system, start RegEdt32.
2. From the Registry menu, choose Select Computer and connect to the OpenVMS system that contains the OpenVMS Registry.
3. Select the key associated with the application you want to change.
4. From the Security menu, choose Permissions... and grant the user Full Control.
5. Repeat the last two steps for each registry key associated with the application (see the list of keys described earlier in this section).

Note `HKEY_CLASSES_ROOT` is an alias for `HKEY_LOCAL_MACHINE\SOFTWARE\Classes` . If you connect to the OpenVMS Registry from Windows NT using Regedt32 and you want to edit the `HKEY_CLASSES_ROOT` key, edit the `HKEY_LOCAL_MACHINE\SOFTWARE\Classes` key.

## F.2 APIs

APIs that require security support are not supported in COM Version 1.0 for OpenVMS.

The APIs supported in this release are as follows:

    BindMoniker
    BstrFromVector
    CLSIDFromProgID
    CLSIDFromString
    CoAddRefServerProcess
    CoCopyProxy
    CoCreateErrorInfo
    CoCreateFreeThreadedMarshaler
    CoCreateGuid
    CoCreateInstance
    CoCreateInstanceEx
    CoDisconnectObject
    CoDosDateTimeToFileTime
    CoFileTimeNow
    CoFileTimeToDosDateTime
    CoFreeAllLibraries
    CoFreeLibrary
    CoFreeUnusedLibraries
    CoGetCallContext
    CoGetClassObject
    CoGetCurrentProcess
    CoGetErrorInfo
    CoGetInstanceFromFile
    CoGetInstanceFromIStorage
    CoGetInterfaceAndReleaseStream
    CoGetMalloc
    CoGetMarshalSizeMax
    CoGetPSClsid
    CoGetStandardMarshal
    CoGetTreatAsClass
    CoImpersonateClient
    CoInitialize
    CoInitializeEx
    CoInitializeSecurity
    CoIsHandlerConnected
    CoLoadLibrary
    CoLockObjectExternal
    CoMarshalInterface
    CoQueryAuthenticationServices
    CoQueryClientBlanket
    CoQueryProxyBlanket
    CoRegisterChannelHook
    CoRegisterClassObject
    CoRegisterMallocSpy
    CoRegisterMessageFilter
    CoRegisterPSClsid
    CoReleaseMarshalData
    CoReleaseServerProcess
    CoResumeClassObjects
    CoRevertToSelf
    CoRevokeClassObject
    CoRevokeMallocSpy
    CoSetErrorInfo
    CoSetProxyBlanket
    CoSuspendClassObjects
    CoTaskMemAlloc
    CoTaskMemFree
    CoTaskMemRealloc
    CoTreatAsClass
    CoUninitialize
    CoUnmarshalInterface
    CreateAntiMoniker
    CreateBindCtx
    CreateClassMoniker
    CreateDataAdviseHolder
    CreateDispTypeInfo
    CreateErrorInfo
    CreateGenericComposite
    CreateILockBytesOnHGlobal
    CreateItemMoniker
    CreatePointerMoniker
    CreateStdDispatch
    CreateStreamOnHGlobal
    CreateTypeLib
    DispGetIDsOfNames
    DispGetParam
    DispInvoke
    DllCanUnloadNow
    DllGetClassObject
    DllGetClassObject
    DllMain
    DllRegisterServer
    DllUnregisterServer
    DosDateTimeToVariantTime
    FreePropVariantArray
    GetActiveObject
    GetAltMonthNames
    GetClassFile
    GetConvertStg
    GetErrorInfo
    GetHGlobalFromILockBytes
    GetHGlobalFromStream
    GetRunningObjectTable
    IIDFromString
    IsEqualCLSID
    IsEqualGUID
    IsEqualIID
    IsValidIid
    IsValidInterface
    IsValidPtrIn
    IsValidPtrOut
    LHashValOfName
    LHashValOfNameSys
    LoadRegTypeLib
    LoadTypeLibEx
    MkParseDisplayName
    MonikerCommonPrefixWith
    MonikerRelativePathTo
    ProgIDFromCLSID
    PropStgNameToFmtId
    PropVariantClear
    PropVariantCopy
    QueryPathOfRegTypeLib
    ReadClassStg
    ReadClassStm
    ReadFmtUserTypeStg
    RegisterActiveObject
    RegisterTypeLib
    ReleaseStgMedium
    RevokeActiveObject
    SafeArrayAccessData
    SafeArrayAllocData
    SafeArrayAllocDescriptor
    SafeArrayCopy
    SafeArrayCopyData
    SafeArrayCreate
    SafeArrayCreateVector
    SafeArrayDestroy
    SafeArrayDestroyData
    SafeArrayDestroyDescriptor
    SafeArrayGetDim
    SafeArrayGetElement
    SafeArrayGetElemsize
    SafeArrayGetLBound
    SafeArrayGetUBound
    SafeArrayLock
    SafeArrayPtrOfIndex
    SafeArrayPutElement
    SafeArrayRedim
    SafeArrayUnaccessData
    SafeArrayUnlock
    SetConvertStg
    SetErrorInfo
    StgCreateDocfile
    StgCreateDocfileOnILockBytes
    StgCreatePropSetStg
    StgCreatePropStg
    StgIsStorageFile
    StgIsStorageILockBytes
    StgOpenPropStg
    StgOpenStorage
    StgOpenStorageOnILockBytes
    StgSetTimes
    StringFromCLSID
    StringFromGUID2
    StringFromIID
    SysAllocString
    SysAllocStringByteLen
    SysAllocStringLen
    SysFreeString
    SysReAllocString
    SysReAllocStringLen
    SysStringByteLen
    SysStringLen
    SystemTimeToVariantTime
    UnRegisterTypeLib
    VarDateFromUdate
    VarNumFromParseNum
    VarParseNumFromStr
    VarUdateFromDate
    VariantChangeType
    VariantChangeTypeEx
    VariantClear
    VariantCopy
    VariantCopyInd
    VariantInit
    VariantTimeToDosDateTime
    VariantTimeToSystemTime
    VectorFromBstr
    WriteClassStg
    WriteClassStm
    WriteFmtUserTypeStg

## F.3 Interfaces

The interfaces supported in this release are as follows:

    IAdviseSink
    IBindCtx
    IClassActivator
    IClassFactory
    IConnectionPoint
    IConnectionPointContainer
    ICreateErrorInfo
    ICreateTypeInfo
    ICreateTypeLib
    IDataAdviseHolder
    IDataObject
    IDispatch
    IEnumCallBack
    IEnumConnectionPoints
    IEnumConnections
    IEnumFORMATETC
    IEnumMoniker
    IEnumOLEVerb
    IEnumSTATDATA
    IEnumSTATPROPSETSTG
    IEnumSTATSTG
    IEnumString
    IEnumUnknown
    IEnumVariant
    IErrorInfo
    IExternalConnection
    ILockBytes
    IMalloc
    IMallocSpy
    IMarshal
    IMessageFilter
    IMoniker
    IMultiQI
    IParseDisplayName
    IPersist
    IPersistFile
    IPersistStorage
    IPersistStream
    IPropertySetStorage
    IPropertyStorage
    IRootStorage
    IRunnableObject
    IRunningObjectTable
    IStdMarshalInfo
    IStorage
    IStream
    ISupportErrorInfo
    ITypeComp
    ITypeInfo
    ITypeInfo2
    ITypeLib
    ITypeLib2
    IUnknown

## Appendix G
List of Files Installed by COM for OpenVMS

## G.1 Files Installed by COM for OpenVMS

The following files are installed as part of the COM for OpenVMS installation process:

    [000000]DEC-AXPVMS-DCOM-V0101-B-1.PCSI$TLB
    [DCOM$LIBRARY]ATLBASE.H
    [DCOM$LIBRARY]ATLCOM.H
    [DCOM$LIBRARY]ATLCONV.CPP
    [DCOM$LIBRARY]ATLCONV.H
    [DCOM$LIBRARY]ATLDEF.H
    [DCOM$LIBRARY]ATLIFACE.H
    [DCOM$LIBRARY]ATLIFACE.IDL
    [DCOM$LIBRARY]ATLIMPL.CPP
    [DCOM$LIBRARY]ATLMAIN.CXX
    [DCOM$LIBRARY]CDERR.H
    [DCOM$LIBRARY]CGUID.H
    [DCOM$LIBRARY]COGUID.H
    [DCOM$LIBRARY]COMCAT.H
    [DCOM$LIBRARY]COMCAT.IDL
    [DCOM$LIBRARY]COMMDLG.H
    [DCOM$LIBRARY]CONIO.H
    [DCOM$LIBRARY]CRTDBG.H
    [DCOM$LIBRARY]DCOM$GUIDGEN.CLD
    [DCOM$LIBRARY]DCOM$REGDATA.REG
    [DCOM$LIBRARY]DCOM$RUNSHRLIB.CLD
    [DCOM$LIBRARY]DCOM.OPT
    [DCOM$LIBRARY]DDE.H
    [DCOM$LIBRARY]DDEML.H
    [DCOM$LIBRARY]DLGS.H
    [DCOM$LIBRARY]EXCPT.H
    [DCOM$LIBRARY]IMM.H
    [DCOM$LIBRARY]INITGUID.H
    [DCOM$LIBRARY]LZEXPAND.H
    [DCOM$LIBRARY]MCX.H
    [DCOM$LIBRARY]MIDLES.H
    [DCOM$LIBRARY]MIDL_STUB_TYPES.H
    [DCOM$LIBRARY]MMSYSTEM.H
    [DCOM$LIBRARY]NB30.H
    [DCOM$LIBRARY]NTA_MESSAGE.H
    [DCOM$LIBRARY]OAIDL.ACF
    [DCOM$LIBRARY]OAIDL.H
    [DCOM$LIBRARY]OAIDL.IDL
    [DCOM$LIBRARY]OBJBASE.H
    [DCOM$LIBRARY]OBJIDL.H
    [DCOM$LIBRARY]OBJIDL.IDL
    [DCOM$LIBRARY]OCIDL.ACF
    [DCOM$LIBRARY]OCIDL.H
    [DCOM$LIBRARY]OCIDL.IDL
    [DCOM$LIBRARY]OLE2.H
    [DCOM$LIBRARY]OLEAUTO.H
    [DCOM$LIBRARY]OLECTL.H
    [DCOM$LIBRARY]OLEIDL.H
    [DCOM$LIBRARY]OLEIDL.IDL
    [DCOM$LIBRARY]POPPACK.H
    [DCOM$LIBRARY]PRSHT.H
    [DCOM$LIBRARY]PSHPACK1.H
    [DCOM$LIBRARY]PSHPACK2.H
    [DCOM$LIBRARY]PSHPACK4.H
    [DCOM$LIBRARY]PSHPACK8.H
    [DCOM$LIBRARY]PTHREAD.H
    [DCOM$LIBRARY]PTHREAD_EXCEPTION.H
    [DCOM$LIBRARY]RPC.H
    [DCOM$LIBRARY]RPCDCE.H
    [DCOM$LIBRARY]RPCDCEP.H
    [DCOM$LIBRARY]RPCNDR.H
    [DCOM$LIBRARY]RPCNSI.H
    [DCOM$LIBRARY]RPCNSIP.H
    [DCOM$LIBRARY]RPCNTERR.H
    [DCOM$LIBRARY]RPCPROXY.H
    [DCOM$LIBRARY]SERVPROV.H
    [DCOM$LIBRARY]SERVPROV.IDL
    [DCOM$LIBRARY]SHELLAPI.H
    [DCOM$LIBRARY]SHLWAPI.H
    [DCOM$LIBRARY]STATREG.CPP
    [DCOM$LIBRARY]STATREG.H
    [DCOM$LIBRARY]STDOLE2.TLB
    [DCOM$LIBRARY]STDOLE32.TLB
    [DCOM$LIBRARY]TCHAR.H
    [DCOM$LIBRARY]UNKNWN.H
    [DCOM$LIBRARY]UNKNWN.IDL
    [DCOM$LIBRARY]URLMON.H
    [DCOM$LIBRARY]URLMON.IDL
    [DCOM$LIBRARY]UUID.OLB
    [DCOM$LIBRARY]VMS_ATL.H
    [DCOM$LIBRARY]VMS_DCOM.H
    [DCOM$LIBRARY]VMS_IOCTL.H
    [DCOM$LIBRARY]WCHAR.H
    [DCOM$LIBRARY]WINBASE.H
    [DCOM$LIBRARY]WINCON.H
    [DCOM$LIBRARY]WINDEF.H
    [DCOM$LIBRARY]WINDOWS.H
    [DCOM$LIBRARY]WINDU_PLATFORM.H
    [DCOM$LIBRARY]WINDU_STDLIB.H
    [DCOM$LIBRARY]WINDU_STRING.H
    [DCOM$LIBRARY]WINDU_VTBL.H
    [DCOM$LIBRARY]WINERROR.H
    [DCOM$LIBRARY]WINGDI.H
    [DCOM$LIBRARY]WINNETWK.H
    [DCOM$LIBRARY]WINNLS.H
    [DCOM$LIBRARY]WINNT.H
    [DCOM$LIBRARY]WINPERF.H
    [DCOM$LIBRARY]WINREG.H
    [DCOM$LIBRARY]WINSOCK.H
    [DCOM$LIBRARY]WINSPOOL.H
    [DCOM$LIBRARY]WINSVC.H
    [DCOM$LIBRARY]WINUSER.H
    [DCOM$LIBRARY]WINVER.H
    [DCOM$LIBRARY]WTYPES.H
    [DCOM$LIBRARY]WTYPES.IDL
    [DCOM$LIBRARY]WUEXTEN.H
    [DCOM$LIBRARY]WUUNALIGNED.H
    [DCOM$LIBRARY]WUVERSION.H
    [DCOM$WIN32.NLS]BIG5.NLS
    [DCOM$WIN32.NLS]CTYPE.NLS
    [DCOM$WIN32.NLS]C_037.NLS
    [DCOM$WIN32.NLS]C_10000.NLS
    [DCOM$WIN32.NLS]C_10001.NLS
    [DCOM$WIN32.NLS]C_10002.NLS
    [DCOM$WIN32.NLS]C_10003.NLS
    [DCOM$WIN32.NLS]C_10004.NLS
    [DCOM$WIN32.NLS]C_10005.NLS
    [DCOM$WIN32.NLS]C_10006.NLS
    [DCOM$WIN32.NLS]C_10007.NLS
    [DCOM$WIN32.NLS]C_10008.NLS
    [DCOM$WIN32.NLS]C_10010.NLS
    [DCOM$WIN32.NLS]C_10017.NLS
    [DCOM$WIN32.NLS]C_10029.NLS
    [DCOM$WIN32.NLS]C_10079.NLS
    [DCOM$WIN32.NLS]C_10081.NLS
    [DCOM$WIN32.NLS]C_10082.NLS
    [DCOM$WIN32.NLS]C_1026.NLS
    [DCOM$WIN32.NLS]C_1250.NLS
    [DCOM$WIN32.NLS]C_1251.NLS
    [DCOM$WIN32.NLS]C_1252.NLS
    [DCOM$WIN32.NLS]C_1253.NLS
    [DCOM$WIN32.NLS]C_1254.NLS
    [DCOM$WIN32.NLS]C_1255.NLS
    [DCOM$WIN32.NLS]C_1256.NLS
    [DCOM$WIN32.NLS]C_1257.NLS
    [DCOM$WIN32.NLS]C_1258.NLS
    [DCOM$WIN32.NLS]C_1361.NLS
    [DCOM$WIN32.NLS]C_20105.NLS
    [DCOM$WIN32.NLS]C_20261.NLS
    [DCOM$WIN32.NLS]C_20269.NLS
    [DCOM$WIN32.NLS]C_20273.NLS
    [DCOM$WIN32.NLS]C_20277.NLS
    [DCOM$WIN32.NLS]C_20278.NLS
    [DCOM$WIN32.NLS]C_20280.NLS
    [DCOM$WIN32.NLS]C_20284.NLS
    [DCOM$WIN32.NLS]C_20285.NLS
    [DCOM$WIN32.NLS]C_20290.NLS
    [DCOM$WIN32.NLS]C_20297.NLS
    [DCOM$WIN32.NLS]C_20420.NLS
    [DCOM$WIN32.NLS]C_20423.NLS
    [DCOM$WIN32.NLS]C_20833.NLS
    [DCOM$WIN32.NLS]C_20838.NLS
    [DCOM$WIN32.NLS]C_20866.NLS
    [DCOM$WIN32.NLS]C_20871.NLS
    [DCOM$WIN32.NLS]C_20880.NLS
    [DCOM$WIN32.NLS]C_20905.NLS
    [DCOM$WIN32.NLS]C_21025.NLS
    [DCOM$WIN32.NLS]C_21027.NLS
    [DCOM$WIN32.NLS]C_28592.NLS
    [DCOM$WIN32.NLS]C_28593.NLS
    [DCOM$WIN32.NLS]C_28594.NLS
    [DCOM$WIN32.NLS]C_28595.NLS
    [DCOM$WIN32.NLS]C_28596.NLS
    [DCOM$WIN32.NLS]C_28597.NLS
    [DCOM$WIN32.NLS]C_28598.NLS
    [DCOM$WIN32.NLS]C_28599.NLS
    [DCOM$WIN32.NLS]C_29001.NLS
    [DCOM$WIN32.NLS]C_437.NLS
    [DCOM$WIN32.NLS]C_500.NLS
    [DCOM$WIN32.NLS]C_708.NLS
    [DCOM$WIN32.NLS]C_720.NLS
    [DCOM$WIN32.NLS]C_737.NLS
    [DCOM$WIN32.NLS]C_775.NLS
    [DCOM$WIN32.NLS]C_850.NLS
    [DCOM$WIN32.NLS]C_852.NLS
    [DCOM$WIN32.NLS]C_855.NLS
    [DCOM$WIN32.NLS]C_857.NLS
    [DCOM$WIN32.NLS]C_860.NLS
    [DCOM$WIN32.NLS]C_861.NLS
    [DCOM$WIN32.NLS]C_862.NLS
    [DCOM$WIN32.NLS]C_863.NLS
    [DCOM$WIN32.NLS]C_864.NLS
    [DCOM$WIN32.NLS]C_865.NLS
    [DCOM$WIN32.NLS]C_866.NLS
    [DCOM$WIN32.NLS]C_869.NLS
    [DCOM$WIN32.NLS]C_870.NLS
    [DCOM$WIN32.NLS]C_874.NLS
    [DCOM$WIN32.NLS]C_875.NLS
    [DCOM$WIN32.NLS]C_932.NLS
    [DCOM$WIN32.NLS]C_936.NLS
    [DCOM$WIN32.NLS]C_949.NLS
    [DCOM$WIN32.NLS]C_950.NLS
    [DCOM$WIN32.NLS]KSC.NLS
    [DCOM$WIN32.NLS]LOCALE.NLS
    [DCOM$WIN32.NLS]L_EXCEPT.NLS
    [DCOM$WIN32.NLS]L_INTL.NLS
    [DCOM$WIN32.NLS]PRC.NLS
    [DCOM$WIN32.NLS]PRCP.NLS
    [DCOM$WIN32.NLS]SORTKEY.NLS
    [DCOM$WIN32.NLS]SORTTBLS.NLS
    [DCOM$WIN32.NLS]UNICODE.NLS
    [DCOM$WIN32.NLS]XJIS.NLS
    [DCOM$WIN32]WINDU$GDISHR.EXE
    [DCOM$WIN32]WINDU$KERNELSHR.EXE
    [DCOM$WIN32]WINDU$PRNTSHR.EXE
    [DCOM$WIN32]WINDU$USERSHR.EXE
    [DCOM$WIN32]WINDU.INI
    [DCOM$WIN32]WINDU.OPT
    [SYS$STARTUP]DCOM$RPCSS.COM
    [SYS$STARTUP]DCOM$SHUTDOWN.COM
    [SYS$STARTUP]DCOM$STARTUP.COM
    [SYSEXE]DCOM$CNFG.EXE
    [SYSEXE]DCOM$COMREGEDT.EXE
    [SYSEXE]DCOM$GUIDGEN.EXE
    [SYSEXE]DCOM$MIDL.EXE
    [SYSEXE]DCOM$REGSVR32.EXE
    [SYSEXE]DCOM$RPCSS.EXE
    [SYSEXE]DCOM$RUNSHRLIB.EXE
    [SYSEXE]DCOM$SCLIENT.EXE
    [SYSEXE]DCOM$SSERVER.EXE
    [SYSEXE]DCOM$SSERVER_REG.COM
    [SYSEXE]DCOM$TOOL.EXE
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]BUILD_CLIENTAUTH.COM
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]CLIENT.CXX
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]CLIENTAUTH$SHR.OPT
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]CLIENTAUTH.CXX
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]CLIENTAUTH.DEF
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]CLIENTAUTH.IDL
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]MAKE-ONE.
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]MAKEFILE.BAT
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]PROXY$SHR.OPT
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]PROXY.DEF
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]README-CLIENTAUTH.TXT
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]REGISTRY.CXX
    [SYSHLP.EXAMPLES.DCOM.CLIENTAUTH]REGISTRY.H
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]BUILD_DISPATCH_SAMPLE1.COM
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]BUILD_DISPATCH_SAMPLE1.MMS
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]CLIENT.CXX
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]DCLIENT.CXX
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]DISPCMPNT$SHR.OPT
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]DISPCMPNT.CXX
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]DISPCMPNT.DEF
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]DISPCMPNT.IDL
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]MAKE-ONE.
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]MAKEFILE.BAT
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]README-DISPATCH-SAMPLE1.TXT
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]REGISTRY.CXX
    [SYSHLP.EXAMPLES.DCOM.DISPATCH_SAMPLE1]REGISTRY.H
    [SYSHLP.EXAMPLES.DCOM.EVENTS]BUILD_EVENTS_SAMPLE.COM
    [SYSHLP.EXAMPLES.DCOM.EVENTS]EVENTS_SAMPLE.C
    [SYSHLP.EXAMPLES.DCOM.EVENTS]EVENTS_SAMPLE.H
    [SYSHLP.EXAMPLES.DCOM.EVENTS]NTA_WIN32.C
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]BUILD_SAMPLE1.COM
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]BUILD_SAMPLE1.MMS
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]CLIENT.CXX
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]CMPNT$SHR.OPT
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]CMPNT.CXX
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]CMPNT.DEF
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]MAKE-ONE.
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]MAKEFILE.BAT
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]PROXY$SHR.OPT
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]PROXY.DEF
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]README-SAMPLE1.TXT
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]REGISTRY.CXX
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]REGISTRY.H
    [SYSHLP.EXAMPLES.DCOM.SAMPLE1]SERVER.IDL
    [SYSHLP.EXAMPLES.DCOM.SIMPLE]BUILD_SIMPLE.COM
    [SYSHLP.EXAMPLES.DCOM.SIMPLE]INSTALL.BAT
    [SYSHLP.EXAMPLES.DCOM.SIMPLE]MAKEFILE.
    [SYSHLP.EXAMPLES.DCOM.SIMPLE]README-SIMPLE.TXT
    [SYSHLP.EXAMPLES.DCOM.SIMPLE]REGISTER_SIMPLE.COM
    [SYSHLP.EXAMPLES.DCOM.SIMPLE]SCLIENT.CPP
    [SYSHLP.EXAMPLES.DCOM.SIMPLE]SSERVER.CPP
    [SYSHLP.EXAMPLES.DCOM.SIMPLE]SSERVER.REG
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]BUILD_TESTATL_INPROC.COM
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]BUILD_TESTATL_INPROC.MMS
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]CLIENT.CXX
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]MATH101$SHR.OPT
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]MATH101.CXX
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]MATH101.IDL
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]MATH101PS$SHR.OPT
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]MATHFORMULAS.CXX
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]MATHFORMULAS.H
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]MATHFORMULAS.RGS
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]README-TESTATL_INPROC.TXT
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]RESOURCE.H
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]STDAFX.CXX
    [SYSHLP.EXAMPLES.DCOM.TESTATL_INPROC]STDAFX.H
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]BUILD_TESTATL_OUTPROC.COM
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]BUILD_TESTATL_OUTPROC.MMS
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]CLIENT.CXX
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]INSIDEDCOM.CXX
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]INSIDEDCOM.H
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]INSIDEDCOM.RGS
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]README-TESTATL_OUTPROC.TXT
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]RESOURCE.H
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]STDAFX.CXX
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]STDAFX.H
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]TESTATL.CXX
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]TESTATL.IDL
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]TESTATL.RGS
    [SYSHLP.EXAMPLES.DCOM.TESTATL_OUTPROC]TESTATLPS$SHR.OPT
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]BUILD_WRAPPER.COM
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]MAKE-ONE.
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]MAKEFILE.BAT
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]README.TXT
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]REGISTRY.CXX
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]REGISTRY.H
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]TEST.COM
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]VBCLIENT.FRM
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]VBCLIENT.VBP
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]WR$SHR.OPT
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]WRAPPER.CXX
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]WRAPPER.DEF
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]WRAPPER.IDL
    [SYSHLP.EXAMPLES.DCOM.WRAPPER]WRAPPERCLIENT.CXX
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700.HTML
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700.PDF
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700.PS
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700_001.HTML
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700_002.HTML
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700_003.HTML
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700_004.HTML
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700_005.HTML
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700_006.HTML
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700_CONTENTS.HTML
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700_CONTENTS_001.HTML
    [SYSHLP]OVMS_CONNECT_DEV_GDE_0700_INDEX.HTML
    [SYSHLP]VM-0126A.GIF
    [SYSHLP]VM-0224A.GIF
    [SYSHLP]VM-0225A.GIF
    [SYSHLP]VM-0226A.GIF
    [SYSHLP]VM-0227A.GIF
    [SYSHLP]VM-0228A.GIF
    [SYSHLP]VM-0283A.GIF
    [SYSHLP]VM-0331A.GIF
    [SYSHLP]VM-8782A.GIF
    [SYSHLP]ZK-8782A.GIF
    [SYSLIB]DCOM$MIDL_SHR.EXE
    [SYSLIB]DCOM$NT_WRAPPERS_SHR.EXE
    [SYSLIB]DCOM$OLE32_SHR.EXE
    [SYSLIB]DCOM$OLEAUT32_SHR.EXE
    [SYSLIB]DCOM$RPCRT4_SHR.EXE
    [SYSLIB]DCOM$WIN32_SHR.EXE
    [SYSMGR]DCOM$CREATE_ACCOUNT.COM
    [SYSMGR]DCOM$REGISTRY_KEYS.COM
    [SYSMGR]DCOM$SETUP.COM
    [SYSMSG]DCOM$GUIDGEN_MSG.EXE
    [SYSMSG]NTARPCMSG.EXE
    [SYSMSG]NTAWINMSG.EXE
    [000000]DEC-AXPVMS-DCOM-V0101-B-1.PCSI$DESCRIPTION

## Appendix H
Discount Coupons for COM Books

By special arrangement with the publishers, Compaq is able to provide COM for OpenVMS developers with the following discount coupons for some of the third-party COM books mentioned in this manual. Please follow the instructions on the coupon when ordering books.

## Appendix I
Glossary

class (registry class): Registry element attribute that allows you to store additional descriptive information with a registry key or subkey.

encapsulation: The process of updating or extending the life of existing application code by leaving most of the code and its functionality intact, while including new or updated code (usually in a different programming language) at key entry points.

For example, you might add a Windows graphical interface to a character-cell application by writing some Visual Basic code that collects information from a Windows client, then formats and submits the data to the existing character cell application as if the data had come from the character cell interface.

hive: A discrete set of keys, subkeys, and value entries contained in the registry.

in-process server: An application that is located on the same system as the requesting client. On Windows NT systems, in-process servers are usually implemented as DLLs. On OpenVMS systems, in-process servers are usually implemented as shareable images.

key (registry key): Registry element that contains information specific to the computer, system, or user.

out-of-process server: An application that is located on a different system than the requesting client. On Windows NT systems, out-of-process servers are usually implemented as .EXE files.

registry: A hierarchical database consisting of one or more files that stores configuration information about system hardware and software.

subkey (registry subkey): Registry element that is a child of a registry key. A registry key can have zero or more subkeys.

value (registry value): Registry element that is the entry or value for a registry key or subkey.

wrapper: See encapsulation.

## Appendix J
Acronyms

ACM: Authentication and Credential Management Authority

ACME: Authentication and Credential Management Extension

API: Application Program Interface

ATL: Active Template Library

COM: Component Object Model

CLSID: Class ID

DCOM: Distributed Component Object Model

DLL: Dynamic Link Library

FMS: Forms Management System

GUI: Graphical User Interface

GUID: Globally Unique Identifier

MIDL: Microsoft Interface Definition Language

OO: Object oriented

RPC: Remote Procedure Call

SAM: Security Account Manager

SID: Security Identifier

SMG: Screen Management Facility

SSPI: Security Support Provider Interface

UI: User Interface

UIC: User Identification Code

Index | Contents

| privacy and legal statement |
6539PRO_006.HTML