|
//------------------------------------------------------------------------------
// <copyright file="NativeMethods.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
namespace System.Messaging.Interop
{
using System.Text;
using System.Threading;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System;
using System.ComponentModel;
using Microsoft.Win32;
using System.Security;
using System.Security.Permissions;
[System.Runtime.InteropServices.ComVisible(false)]
internal static class NativeMethods
{
//Message Acknowledge constants.
public const int ACKNOWLEDGE_NEGATIVE_ARRIVAL = 0x04;
public const int ACKNOWLEDGE_NEGATIVE_RECEIVE = 0x08;
public const int ACKNOWLEDGE_NONE = 0x00;
public const int ACKNOWLEDGE_POSITIVE_ARRIVAL = 0x01;
public const int ACKNOWLEDGE_POSITIVE_RECEIVE = 0x02;
public const int ACKNOWLEDGE_FULL_REACH_QUEUE = ACKNOWLEDGE_NEGATIVE_ARRIVAL |
ACKNOWLEDGE_POSITIVE_ARRIVAL;
public const int ACKNOWLEDGE_FULL_RECEIVE = ACKNOWLEDGE_NEGATIVE_ARRIVAL |
ACKNOWLEDGE_NEGATIVE_RECEIVE | ACKNOWLEDGE_POSITIVE_RECEIVE;
public const int ACKNOWLEDGE_NOTACKNOWLEDGE_REACH_QUEUE = ACKNOWLEDGE_NEGATIVE_ARRIVAL;
public const int ACKNOWLEDGE_NOTACKNOWLEDGE_RECEIVE = ACKNOWLEDGE_NEGATIVE_ARRIVAL |
ACKNOWLEDGE_NEGATIVE_RECEIVE;
// Algorithm classes.
private const int ALG_CLASS_DATA_ENCRYPT = (3 << 13);
private const int ALG_CLASS_HASH = (4 << 13);
// Hash sub ids.
private const int ALG_SID_MD2 = 1;
private const int ALG_SID_MD4 = 2;
private const int ALG_SID_MD5 = 3;
private const int ALG_SID_SHA = 4;
private const int ALG_SID_MAC = 5;
private const int ALG_SID_SHA256 = 12; // 0xC
private const int ALG_SID_SHA384 = 13; // 0xD
private const int ALG_SID_SHA512 = 14; // 0xE
private const int ALG_SID_RIPEMD = 6;
private const int ALG_SID_RIPEMD160 = 7;
private const int ALG_SID_SSL3SHAMD5 = 8;
// RC2 sub-ids.
private const int ALG_SID_RC2 = 2;
private const int ALG_SID_RC4 = 1;
// Algorithm types.
private const int ALG_TYPE_ANY = 0;
private const int ALG_TYPE_BLOCK = (3 << 9);
private const int ALG_TYPE_STREAM = (4 << 9);
// Algorithm identifier definitions.
public const int CALG_MD2 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2);
public const int CALG_MD4 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4);
public const int CALG_MD5 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5);
public const int CALG_SHA = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA);
public const int CALG_MAC = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC);
public const int CALG_SHA256 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA256);
public const int CALG_SHA384 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA384);
public const int CALG_SHA512 = (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA512);
public const int CALG_RC2 = (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2);
public const int CALG_RC4 = (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4);
//Stream constants
public const int LOCK_WRITE = 0x1;
public const int LOCK_EXCLUSIVE = 0x2;
public const int LOCK_ONLYONCE = 0x4;
public const int STATFLAG_DEFAULT = 0x0;
public const int STATFLAG_NONAME = 0x1;
public const int STATFLAG_NOOPEN = 0x2;
public const int STGC_DEFAULT = 0x0;
public const int STGC_OVERWRITE = 0x1;
public const int STGC_ONLYIFCURRENT = 0x2;
public const int STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 0x4;
public const int STREAM_SEEK_SET = 0x0;
public const int STREAM_SEEK_CUR = 0x1;
public const int STREAM_SEEK_END = 0x2;
public const int E_UNEXPECTED = unchecked((int)0x8000FFFF);
public const int E_NOTIMPL = unchecked((int)0x80004001);
public const int E_OUTOFMEMORY = unchecked((int)0x8007000E);
public const int E_INVALIDARG = unchecked((int)0x80070057);
public const int E_NOINTERFACE = unchecked((int)0x80004002);
public const int E_POINTER = unchecked((int)0x80004003);
public const int E_HANDLE = unchecked((int)0x80070006);
public const int E_ABORT = unchecked((int)0x80004004);
public const int E_FAIL = unchecked((int)0x80004005);
public static Guid IID_IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}");
//Management Properties constants.
public const int MANAGEMENT_BASE = 0;
public const int MANAGEMENT_ACTIVEQUEUES = (MANAGEMENT_BASE + 1); /* VT_LPWSTR | VT_VECTOR */
public const int MANAGEMENT_PRIVATEQ = (MANAGEMENT_BASE + 2); /* VT_LPWSTR | VT_VECTOR */
public const int MANAGEMENT_DSSERVER = (MANAGEMENT_BASE + 3); /* VT_LPWSTR */
public const int MANAGEMENT_CONNECTED = (MANAGEMENT_BASE + 4); /* VT_LPWSTR */
public const int MANAGEMENT_TYPE = (MANAGEMENT_BASE + 5); /* VT_LPWSTR */
//Machine Properties constants.
public const int MACHINE_BASE = 200;
public const int MACHINE_SITE_ID = MACHINE_BASE + 1; /* VT_CLSID */
public const int MACHINE_ID = MACHINE_BASE + 2; /* VT_CLSID */
public const int MACHINE_PATHNAME = MACHINE_BASE + 3; /* VT_LPWSTR */
public const int MACHINE_CONNECTION = MACHINE_BASE + 4; /* VT_LPWSTR|VT_VECTOR */
public const int MACHINE_ENCRYPTION_PK = MACHINE_BASE + 5; /* VT_BLOB */
//Max constants.
public const int MAX_MESSAGE_ID_SIZE = 20;
public const int MAX_LABEL_LEN = 124;
//Message Authentication level constants.
public const int MESSAGE_AUTHENTICATION_LEVEL_NONE = 0;
public const int MESSAGE_AUTHENTICATION_LEVEL_ALWAYS = 1;
public const int MESSAGE_AUTHENTICATION_LEVEL_MSMQ10 = 2;
public const int MESSAGE_AUTHENTICATION_LEVEL_MSMQ20 = 4;
//Message Class constants
public const int MESSAGE_CLASS_ACCESS_DENIED = (1 << 15) | 0x04;
public const int MESSAGE_CLASS_BAD_DESTINATION_QUEUE = (1 << 15);
public const int MESSAGE_CLASS_BAD_ENCRYPTION = (1 << 15) | 0x07;
public const int MESSAGE_CLASS_BAD_SIGNATURE = (1 << 15) | 0x06;
public const int MESSAGE_CLASS_COULD_NOT_ENCRYPT = (1 << 15) | 0x08;
public const int MESSAGE_CLASS_HOP_COUNT_EXCEEDED = (1 << 15) | 0x05;
public const int MESSAGE_CLASS_NORMAL = 0x00;
public const int MESSAGE_CLASS_NOT_TRANSACTIONAL_QUEUE = (1 << 15) | 0x09;
public const int MESSAGE_CLASS_NOT_TRANSACTIONAL_MESSAGE = (1 << 15) | 0x0A;
public const int MESSAGE_CLASS_PURGED = (1 << 15) | 0x01;
public const int MESSAGE_CLASS_QUEUE_DELETED = (1 << 15) | (1 << 14);
public const int MESSAGE_CLASS_QUEUE_EXCEED_QUOTA = (1 << 15) | 0x03;
public const int MESSAGE_CLASS_QUEUE_PURGED = (1 << 15) | (1 << 14) | 0x01;
public const int MESSAGE_CLASS_REACH_QUEUE = 0x02;
public const int MESSAGE_CLASS_REACH_QUEUE_TIMEOUT = (1 << 15) | 0x02;
public const int MESSAGE_CLASS_RECEIVE = (1 << 14);
public const int MESSAGE_CLASS_RECEIVE_TIMEOUT = (1 << 15) | (1 << 14) | 0x02;
public const int MESSAGE_CLASS_REPORT = 0x01;
//Message Delivery constants.
public const int MESSAGE_DELIVERY_EXPRESS = 0;
public const int MESSAGE_DELIVERY_RECOVERABLE = 1;
//Message Journal constants.
public const int MESSAGE_JOURNAL_NONE = 0;
public const int MESSAGE_JOURNAL_DEADLETTER = 1;
public const int MESSAGE_JOURNAL_JOURNAL = 2;
//Message Privacy Level constants.
public const int MESSAGE_PRIVACY_LEVEL_NONE = 0;
public const int MESSAGE_PRIVACY_LEVEL_BODY = 1;
//Message PropertyId constants.
public const int MESSAGE_PROPID_BASE = 0;
public const int MESSAGE_PROPID_ACKNOWLEDGE = (MESSAGE_PROPID_BASE + 6); /* VT_UI1 */
public const int MESSAGE_PROPID_ADMIN_QUEUE = (MESSAGE_PROPID_BASE + 17); /* VT_LPWSTR */
public const int MESSAGE_PROPID_ADMIN_QUEUE_LEN = (MESSAGE_PROPID_BASE + 18); /* VT_UI4 */
public const int MESSAGE_PROPID_APPSPECIFIC = (MESSAGE_PROPID_BASE + 8); /* VT_UI4 */
public const int MESSAGE_PROPID_ARRIVEDTIME = (MESSAGE_PROPID_BASE + 32); /* VT_UI4 */
public const int MESSAGE_PROPID_AUTHENTICATED = (MESSAGE_PROPID_BASE + 25); /* VT_UI1 */
public const int MESSAGE_PROPID_AUTH_LEVEL = (MESSAGE_PROPID_BASE + 24); /* VT_UI4 */
public const int MESSAGE_PROPID_BODY = (MESSAGE_PROPID_BASE + 9); /* VT_UI1|VT_VECTOR */
public const int MESSAGE_PROPID_BODY_SIZE = (MESSAGE_PROPID_BASE + 10); /* VT_UI4 */
public const int MESSAGE_PROPID_BODY_TYPE = (MESSAGE_PROPID_BASE + 42); /* VT_UI4 */
public const int MESSAGE_PROPID_CLASS = (MESSAGE_PROPID_BASE + 1); /* VT_UI2 */
public const int MESSAGE_PROPID_CONNECTOR_TYPE = (MESSAGE_PROPID_BASE + 38); /* VT_CLSID */
public const int MESSAGE_PROPID_CORRELATIONID = (MESSAGE_PROPID_BASE + 3); /* VT_UI1|VT_VECTOR */
public const int MESSAGE_PROPID_DELIVERY = (MESSAGE_PROPID_BASE + 5); /* VT_UI1 */
public const int MESSAGE_PROPID_DEST_QUEUE = (MESSAGE_PROPID_BASE + 33); /* VT_LPWSTR */
public const int MESSAGE_PROPID_DEST_QUEUE_LEN = (MESSAGE_PROPID_BASE + 34); /* VT_UI4 */
public const int MESSAGE_PROPID_DEST_SYMM_KEY = (MESSAGE_PROPID_BASE + 43); /* VT_UI1|VT_VECTOR */
public const int MESSAGE_PROPID_DEST_SYMM_KEY_LEN = (MESSAGE_PROPID_BASE + 44); /* VT_UI4 */
public const int MESSAGE_PROPID_ENCRYPTION_ALG = (MESSAGE_PROPID_BASE + 27); /* VT_UI4 */
public const int MESSAGE_PROPID_EXTENSION = (MESSAGE_PROPID_BASE + 35); /* VT_UI1|VT_VECTOR */
public const int MESSAGE_PROPID_EXTENSION_LEN = (MESSAGE_PROPID_BASE + 36); /* VT_UI4 */
public const int MESSAGE_PROPID_FIRST_IN_XACT = (MESSAGE_PROPID_BASE + 50); /* VT_UI1 */
public const int MESSAGE_PROPID_HASH_ALG = (MESSAGE_PROPID_BASE + 26); /* VT_UI4 */
public const int MESSAGE_PROPID_JOURNAL = (MESSAGE_PROPID_BASE + 7); /* VT_UI1 */
public const int MESSAGE_PROPID_LABEL = (MESSAGE_PROPID_BASE + 11); /* VT_LPWSTR */
public const int MESSAGE_PROPID_LABEL_LEN = (MESSAGE_PROPID_BASE + 12); /* VT_UI4 */
public const int MESSAGE_PROPID_LAST_IN_XACT = (MESSAGE_PROPID_BASE + 51); /* VT_UI1 */
public const int MESSAGE_PROPID_MSGID = (MESSAGE_PROPID_BASE + 2); /* VT_UI1|VT_VECTOR */
public const int MESSAGE_PROPID_PRIORITY = (MESSAGE_PROPID_BASE + 4); /* VT_UI1 */
public const int MESSAGE_PROPID_PRIV_LEVEL = (MESSAGE_PROPID_BASE + 23); /* VT_UI4 */
public const int MESSAGE_PROPID_PROV_NAME = (MESSAGE_PROPID_BASE + 48); /* VT_LPWSTR */
public const int MESSAGE_PROPID_PROV_NAME_LEN = (MESSAGE_PROPID_BASE + 49); /* VT_UI4 */
public const int MESSAGE_PROPID_PROV_TYPE = (MESSAGE_PROPID_BASE + 47); /* VT_UI4 */
public const int MESSAGE_PROPID_RESP_QUEUE = (MESSAGE_PROPID_BASE + 15); /* VT_LPWSTR */
public const int MESSAGE_PROPID_RESP_QUEUE_LEN = (MESSAGE_PROPID_BASE + 16); /* VT_UI4 */
public const int MESSAGE_PROPID_SECURITY_CONTEXT = (MESSAGE_PROPID_BASE + 37); /* VT_UI4 */
public const int MESSAGE_PROPID_SENDERID = (MESSAGE_PROPID_BASE + 20); /* VT_UI1|VT_VECTOR */
public const int MESSAGE_PROPID_SENDERID_LEN = (MESSAGE_PROPID_BASE + 21); /* VT_UI4 */
public const int MESSAGE_PROPID_SENDERID_TYPE = (MESSAGE_PROPID_BASE + 22); /* VT_UI4 */
public const int MESSAGE_PROPID_SENDER_CERT = (MESSAGE_PROPID_BASE + 28); /* VT_UI1|VT_VECTOR */
public const int MESSAGE_PROPID_SENDER_CERT_LEN = (MESSAGE_PROPID_BASE + 29); /* VT_UI4 */
public const int MESSAGE_PROPID_SENTTIME = (MESSAGE_PROPID_BASE + 31); /* VT_UI4 */
public const int MESSAGE_PROPID_SIGNATURE = (MESSAGE_PROPID_BASE + 45); /* VT_UI1|VT_VECTOR */
public const int MESSAGE_PROPID_SIGNATURE_LEN = (MESSAGE_PROPID_BASE + 46); /* VT_UI4 */
public const int MESSAGE_PROPID_SRC_MACHINE_ID = (MESSAGE_PROPID_BASE + 30); /* VT_CLSID */
public const int MESSAGE_PROPID_TIME_TO_BE_RECEIVED = (MESSAGE_PROPID_BASE + 14); /* VT_UI4 */
public const int MESSAGE_PROPID_TIME_TO_REACH_QUEUE = (MESSAGE_PROPID_BASE + 13); /* VT_UI4 */
public const int MESSAGE_PROPID_TRACE = (MESSAGE_PROPID_BASE + 41); /* VT_UI1 */
public const int MESSAGE_PROPID_VERSION = (MESSAGE_PROPID_BASE + 19); /* VT_UI4 */
public const int MESSAGE_PROPID_XACT_STATUS_QUEUE = (MESSAGE_PROPID_BASE + 39); /* VT_LPWSTR */
public const int MESSAGE_PROPID_XACT_STATUS_QUEUE_LEN = (MESSAGE_PROPID_BASE + 40); /* VT_UI4 */
public const int MESSAGE_PROPID_XACTID = (MESSAGE_PROPID_BASE + 52); /* VT_UI1|VT_VECTOR */
public const int MESSAGE_PROPID_LOOKUPID = (MESSAGE_PROPID_BASE + 60); /* VT_UI8 */
//Message SenderId types
public const int MESSAGE_SENDERID_TYPE_NONE = 0;
public const int MESSAGE_SENDERID_TYPE_SID = 1;
//Message Trace constants.
public const int MESSAGE_TRACE_NONE = 0;
public const int MESSAGE_TRACE_SEND_ROUTE_TO_REPORT_QUEUE = 1;
// Chryptographic Provider Types
public const int PROV_RSA_FULL = 1;
public const int PROV_RSA_SIG = 2;
public const int PROV_DSS = 3;
public const int PROV_FORTEZZA = 4;
public const int PROV_MS_EXCHANGE = 5;
public const int PROV_SSL = 6;
public const int PROV_STT_MER = 7;
public const int PROV_STT_ACQ = 8;
public const int PROV_STT_BRND = 9;
public const int PROV_STT_ROOT = 10;
public const int PROV_STT_ISS = 11;
//Queue Access constants.
public const int QUEUE_ACCESS_RECEIVE = 1;
public const int QUEUE_ACCESS_SEND = 2;
public const int QUEUE_ACCESS_PEEK = 32;
public const int QUEUE_ACCESS_ADMIN = 128;
//Queue Action constants
public const int QUEUE_ACTION_RECEIVE = 0x00000000;
public const int QUEUE_ACTION_PEEK_CURRENT = unchecked((int)0x80000000);
public const int QUEUE_ACTION_PEEK_NEXT = unchecked((int)0x80000001);
//Lookup Action constants
internal const int LOOKUP_PEEK_MASK = 0x40000010;
internal const int LOOKUP_RECEIVE_MASK = 0x40000020;
//Queue Authenticate constants.
public const int QUEUE_AUTHENTICATE_NONE = 0;
public const int QUEUE_AUTHENTICATE_AUTHENTICATE = 1;
//Queue Journal constants.
public const int QUEUE_JOURNAL_NONE = 0;
public const int QUEUE_JOURNAL_JOURNAL = 1;
//Queue Privacy level constants
public const int QUEUE_PRIVACY_LEVEL_NONE = 0;
public const int QUEUE_PRIVACY_LEVEL_OPTIONAL = 1;
public const int QUEUE_PRIVACY_LEVEL_BODY = 2;
//Queue PropertyId constants.
public const int QUEUE_PROPID_BASE = 100;
public const int QUEUE_PROPID_INSTANCE = QUEUE_PROPID_BASE + 1; /* VT_CLSID */
public const int QUEUE_PROPID_TYPE = QUEUE_PROPID_BASE + 2; /* VT_CLSID */
public const int QUEUE_PROPID_PATHNAME = QUEUE_PROPID_BASE + 3; /* VT_LPWSTR */
public const int QUEUE_PROPID_JOURNAL = QUEUE_PROPID_BASE + 4; /* VT_UI1 */
public const int QUEUE_PROPID_QUOTA = QUEUE_PROPID_BASE + 5; /* VT_UI4 */
public const int QUEUE_PROPID_BASEPRIORITY = QUEUE_PROPID_BASE + 6; /* VT_I2 */
public const int QUEUE_PROPID_JOURNAL_QUOTA = QUEUE_PROPID_BASE + 7; /* VT_UI4 */
public const int QUEUE_PROPID_LABEL = QUEUE_PROPID_BASE + 8; /* VT_LPWSTR */
public const int QUEUE_PROPID_CREATE_TIME = QUEUE_PROPID_BASE + 9; /* VT_I4 */
public const int QUEUE_PROPID_MODIFY_TIME = QUEUE_PROPID_BASE + 10; /* VT_I4 */
public const int QUEUE_PROPID_AUTHENTICATE = QUEUE_PROPID_BASE + 11; /* VT_UI1 */
public const int QUEUE_PROPID_PRIV_LEVEL = QUEUE_PROPID_BASE + 12; /* VT_UI4 */
public const int QUEUE_PROPID_TRANSACTION = QUEUE_PROPID_BASE + 13; /* VT_UI1 */
//public const int QUEUE_PROPID_PATHNAME_DNS = QUEUE_PROPID_BASE + 24; /* VT_LPWSTR */
public const int QUEUE_PROPID_MULTICAST_ADDRESS = QUEUE_PROPID_BASE + 25; /* VT_LPWSTR /
//public const int QUEUE_PROPID_ADS_PATH = QUEUE_PROPID_BASE + 26; //needed to add queue to DL /* VT_LPWSTR */
//Queue Shared Mode constants.
public const int QUEUE_SHARED_MODE_DENY_NONE = 0;
public const int QUEUE_SHARED_MODE_DENY_RECEIVE = 1;
//Queue Transaction constants.
public const int QUEUE_TRANSACTION_NONE = 0;
public const int QUEUE_TRANSACTION_MTS = 1;
public const int QUEUE_TRANSACTION_XA = 2;
public const int QUEUE_TRANSACTION_SINGLE = 3;
//Queue Transactional Mode constants.
public const int QUEUE_TRANSACTIONAL_NONE = 0;
public const int QUEUE_TRANSACTIONAL_TRANSACTIONAL = 1;
//Security constants
public const int MQ_ERROR_SECURITY_DESCRIPTOR_TOO_SMALL = unchecked((int)0xc00e0023);
public const int MQ_OK = 0;
public const int TRUSTEE_IS_SID = 0;
public const int TRUSTEE_IS_NAME = 1;
public const int TRUSTEE_IS_USER = 1;
public const int TRUSTEE_IS_GROUP = 2;
public const int TRUSTEE_IS_DOMAIN = 3;
public const int TRUSTEE_IS_ALIAS = 4;
public const int TRUSTEE_IS_WELL_KNOWN_GROUP = 5;
public const int DACL_SECURITY_INFORMATION = 4;
public const int GRANT_ACCESS = 1;
public const int SET_ACCESS = 2;
public const int DENY_ACCESS = 3;
public const int REVOKE_ACCESS = 4;
public const int NO_MULTIPLE_TRUSTEE = 0;
public const int ERROR_SUCCESS = 0;
public const int SECURITY_DESCRIPTOR_REVISION = 1;
// This call is here because we don't want to invent a separate MessageQueuePermission
// for this call, and there's no suitable existing permission.
[DllImport(ExternDll.Mqrt, EntryPoint = "MQGetSecurityContextEx", CharSet = CharSet.Unicode)]
private static extern int IntMQGetSecurityContextEx(IntPtr lpCertBuffer, int dwCertBufferLength, out SecurityContextHandle phSecurityContext);
public static int MQGetSecurityContextEx(out SecurityContextHandle securityContext)
{
try
{
return IntMQGetSecurityContextEx(IntPtr.Zero, 0, out securityContext);
}
catch (DllNotFoundException)
{
throw new InvalidOperationException(Res.GetString(Res.MSMQNotInstalled));
}
}
[DllImport(ExternDll.Ole32, PreserveSig = false)]
[return: MarshalAs(UnmanagedType.Interface)]
public static extern object OleLoadFromStream(IStream stream, [In] ref Guid iid);
[DllImport(ExternDll.Ole32, PreserveSig = false)]
public static extern void OleSaveToStream(IPersistStream persistStream, IStream stream);
[StructLayout(LayoutKind.Sequential)]
public class SECURITY_DESCRIPTOR
{
public byte revision = 0;
public byte size = 0;
public short control = 0;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
public IntPtr owner = (IntPtr)0;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
public IntPtr Group = (IntPtr)0;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
public IntPtr Sacl = (IntPtr)0;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
public IntPtr Dacl = (IntPtr)0;
}
[StructLayout(LayoutKind.Sequential)]
public struct ExplicitAccess
{
public int grfAccessPermissions;
public int grfAccessMode;
public int grfInheritance;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
public IntPtr pMultipleTrustees;
public int MultipleTrusteeOperation;
public int TrusteeForm;
public int TrusteeType;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources")]
public IntPtr data;
}
}
}
|