CoInitializeSecurity (ole32)
Last changed: RobertChipperfield-212.44.26.236

.
Summary
Registers security and sets the default security values for the process, but this can't be directly called from managed code.

C# Signature:

[DllImport("ole32.dll")]
static extern int CoInitializeSecurity(IntPtr pVoid, int cAuthSvc,
   SOLE_AUTHENTICATION_SERVICE [] asAuthSvc, IntPtr pReserved1,
   uint dwAuthnLevel, uint dwImpLevel, IntPtr pAuthList, uint dwCapabilities,
   IntPtr pReserved3);

VB .NET Signature:

Declare Function CoInitializeSecurity Lib "ole32.dll" (pVoid As IntPtr, _
   cAuthSvc As Integer, asAuthSvc() As SOLE_AUTHENTICATION_SERVICE, _
   pReserved1 As IntPtr, dwAuthnLevel As Integer, dwImpLevel As Integer, _
   pAuthList As IntPtr, dwCapabilities As Integer, pReserved3 As IntPtr) As Integer

User-Defined Types:

SOLE_AUTHENTICATION_SERVICE

Notes:

You shouldn't call CoInitializeSecurity from managed code. That's because the CLR will almost always call into COM/OLE upon startup before execution enters your main method, and as a side effect COM/OLE will implicitly call CoInitializeSecurity if it hasn't already been called. Therefore, calling this from managed code will usually return RPC_E_TOO_LATE.

The workaround is to write an unmanaged "shim" that will call CoInitializeSecurity, then activate and call into managed code. You can do this via an export from a mixed-mode C++ DLL, by registering a managed component for use by COM, or by using the CLR hosting API.

Alternative Managed API:

Do you know one? Please contribute it!

Documentation