536cd135cc
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
1326 lines
61 KiB
C#
1326 lines
61 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="UnsafeNativeMethods.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web {
|
|
using System;
|
|
using System.Collections;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.IO;
|
|
using System.Runtime.ConstrainedExecution;
|
|
using System.Runtime.InteropServices;
|
|
using System.Security.Permissions;
|
|
using System.Text;
|
|
using System.Web.Configuration;
|
|
using System.Web.Hosting;
|
|
using System.Web.Util;
|
|
|
|
[
|
|
System.Runtime.InteropServices.ComVisible(false),
|
|
System.Security.SuppressUnmanagedCodeSecurityAttribute()
|
|
]
|
|
internal static class UnsafeNativeMethods {
|
|
static internal readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
|
|
|
|
/*
|
|
* ADVAPI32.dll
|
|
*/
|
|
[DllImport(ModName.ADVAPI32_FULL_NAME)]
|
|
internal static extern int SetThreadToken(IntPtr threadref, IntPtr token);
|
|
|
|
[DllImport(ModName.ADVAPI32_FULL_NAME)]
|
|
internal static extern int RevertToSelf();
|
|
|
|
public const int TOKEN_ALL_ACCESS = 0x000f01ff;
|
|
public const int TOKEN_EXECUTE = 0x00020000;
|
|
public const int TOKEN_READ = 0x00020008;
|
|
public const int TOKEN_IMPERSONATE = 0x00000004;
|
|
|
|
public const int ERROR_NO_TOKEN = 1008;
|
|
|
|
[DllImport(ModName.ADVAPI32_FULL_NAME, SetLastError=true)]
|
|
internal static extern int OpenThreadToken(IntPtr thread, int access, bool openAsSelf, ref IntPtr hToken);
|
|
|
|
|
|
public const int OWNER_SECURITY_INFORMATION = 0x00000001;
|
|
public const int GROUP_SECURITY_INFORMATION = 0x00000002;
|
|
public const int DACL_SECURITY_INFORMATION = 0x00000004;
|
|
public const int SACL_SECURITY_INFORMATION = 0x00000008;
|
|
|
|
[DllImport(ModName.ADVAPI32_FULL_NAME, SetLastError=true, CharSet=CharSet.Unicode)]
|
|
internal static extern int GetFileSecurity(string filename, int requestedInformation, byte[] securityDescriptor, int length, ref int lengthNeeded);
|
|
|
|
[DllImport(ModName.ADVAPI32_FULL_NAME, SetLastError = true, CharSet = CharSet.Unicode)]
|
|
public static extern int LogonUser(String username, String domain, String password, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
|
|
|
|
[DllImport(ModName.ADVAPI32_FULL_NAME, SetLastError = true, CharSet = CharSet.Unicode)]
|
|
public extern static int ConvertStringSidToSid(string stringSid, out IntPtr pSid);
|
|
|
|
[DllImport(ModName.ADVAPI32_FULL_NAME, SetLastError = true, CharSet = CharSet.Unicode)]
|
|
public extern static int LookupAccountSid(string systemName, IntPtr pSid, StringBuilder szName, ref int nameSize, StringBuilder szDomain, ref int domainSize, ref int eUse);
|
|
|
|
/*
|
|
* ASPNET_STATE.EXE
|
|
*/
|
|
|
|
[DllImport(ModName.STATE_FULL_NAME)]
|
|
internal static extern void STWNDCloseConnection(IntPtr tracker);
|
|
|
|
[DllImport(ModName.STATE_FULL_NAME)]
|
|
internal static extern void STWNDDeleteStateItem(IntPtr stateItem);
|
|
|
|
[DllImport(ModName.STATE_FULL_NAME)]
|
|
internal static extern void STWNDEndOfRequest(IntPtr tracker);
|
|
|
|
[DllImport(ModName.STATE_FULL_NAME, CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern void STWNDGetLocalAddress(IntPtr tracker, StringBuilder buf);
|
|
|
|
[DllImport(ModName.STATE_FULL_NAME)]
|
|
internal static extern int STWNDGetLocalPort(IntPtr tracker);
|
|
|
|
[DllImport(ModName.STATE_FULL_NAME, CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern void STWNDGetRemoteAddress(IntPtr tracker, StringBuilder buf);
|
|
|
|
[DllImport(ModName.STATE_FULL_NAME)]
|
|
internal static extern int STWNDGetRemotePort(IntPtr tracker);
|
|
|
|
|
|
[DllImport(ModName.STATE_FULL_NAME)]
|
|
internal static extern bool STWNDIsClientConnected(IntPtr tracker);
|
|
|
|
[DllImport(ModName.STATE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void STWNDSendResponse(IntPtr tracker, StringBuilder status, int statusLength,
|
|
StringBuilder headers, int headersLength, IntPtr unmanagedState);
|
|
|
|
/*
|
|
* KERNEL32.DLL
|
|
*/
|
|
internal const int FILE_ATTRIBUTE_READONLY = 0x00000001;
|
|
internal const int FILE_ATTRIBUTE_HIDDEN = 0x00000002;
|
|
internal const int FILE_ATTRIBUTE_SYSTEM = 0x00000004;
|
|
internal const int FILE_ATTRIBUTE_DIRECTORY = 0x00000010;
|
|
internal const int FILE_ATTRIBUTE_ARCHIVE = 0x00000020;
|
|
internal const int FILE_ATTRIBUTE_DEVICE = 0x00000040;
|
|
internal const int FILE_ATTRIBUTE_NORMAL = 0x00000080;
|
|
internal const int FILE_ATTRIBUTE_TEMPORARY = 0x00000100;
|
|
internal const int FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200;
|
|
internal const int FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400;
|
|
internal const int FILE_ATTRIBUTE_COMPRESSED = 0x00000800;
|
|
internal const int FILE_ATTRIBUTE_OFFLINE = 0x00001000;
|
|
internal const int FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000;
|
|
internal const int FILE_ATTRIBUTE_ENCRYPTED = 0x00004000;
|
|
|
|
internal const int DELETE = 0x00010000;
|
|
internal const int READ_CONTROL = 0x00020000;
|
|
internal const int WRITE_DAC = 0x00040000;
|
|
internal const int WRITE_OWNER = 0x00080000;
|
|
internal const int SYNCHRONIZE = 0x00100000;
|
|
|
|
internal const int STANDARD_RIGHTS_REQUIRED = 0x000F0000;
|
|
|
|
internal const int STANDARD_RIGHTS_READ = READ_CONTROL;
|
|
internal const int STANDARD_RIGHTS_WRITE = READ_CONTROL;
|
|
internal const int STANDARD_RIGHTS_EXECUTE = READ_CONTROL;
|
|
|
|
internal const int GENERIC_READ = unchecked(((int)0x80000000));
|
|
|
|
internal const int STANDARD_RIGHTS_ALL = 0x001F0000;
|
|
internal const int SPECIFIC_RIGHTS_ALL = 0x0000FFFF;
|
|
|
|
internal const int FILE_SHARE_READ = 0x00000001;
|
|
internal const int FILE_SHARE_WRITE = 0x00000002;
|
|
internal const int FILE_SHARE_DELETE = 0x00000004;
|
|
|
|
internal const int OPEN_EXISTING = 3;
|
|
internal const int OPEN_ALWAYS = 4;
|
|
|
|
internal const int FILE_FLAG_WRITE_THROUGH = unchecked((int)0x80000000);
|
|
internal const int FILE_FLAG_OVERLAPPED = 0x40000000;
|
|
internal const int FILE_FLAG_NO_BUFFERING = 0x20000000;
|
|
internal const int FILE_FLAG_RANDOM_ACCESS = 0x10000000;
|
|
internal const int FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000;
|
|
internal const int FILE_FLAG_DELETE_ON_CLOSE = 0x04000000;
|
|
internal const int FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
|
|
internal const int FILE_FLAG_POSIX_SEMANTICS = 0x01000000;
|
|
|
|
// Win32 Structs in N/Direct style
|
|
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
|
|
internal struct WIN32_FIND_DATA {
|
|
internal uint dwFileAttributes;
|
|
// ftCreationTime was a by-value FILETIME structure
|
|
internal uint ftCreationTime_dwLowDateTime ;
|
|
internal uint ftCreationTime_dwHighDateTime;
|
|
// ftLastAccessTime was a by-value FILETIME structure
|
|
internal uint ftLastAccessTime_dwLowDateTime;
|
|
internal uint ftLastAccessTime_dwHighDateTime;
|
|
// ftLastWriteTime was a by-value FILETIME structure
|
|
internal uint ftLastWriteTime_dwLowDateTime;
|
|
internal uint ftLastWriteTime_dwHighDateTime;
|
|
internal uint nFileSizeHigh;
|
|
internal uint nFileSizeLow;
|
|
internal uint dwReserved0;
|
|
internal uint dwReserved1;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
|
|
internal string cFileName;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)]
|
|
internal string cAlternateFileName;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal struct WIN32_FILE_ATTRIBUTE_DATA {
|
|
internal int fileAttributes;
|
|
internal uint ftCreationTimeLow;
|
|
internal uint ftCreationTimeHigh;
|
|
internal uint ftLastAccessTimeLow;
|
|
internal uint ftLastAccessTimeHigh;
|
|
internal uint ftLastWriteTimeLow;
|
|
internal uint ftLastWriteTimeHigh;
|
|
internal uint fileSizeHigh;
|
|
internal uint fileSizeLow;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal struct WIN32_BY_HANDLE_FILE_INFORMATION {
|
|
internal int fileAttributes;
|
|
internal uint ftCreationTimeLow;
|
|
internal uint ftCreationTimeHigh;
|
|
internal uint ftLastAccessTimeLow;
|
|
internal uint ftLastAccessTimeHigh;
|
|
internal uint ftLastWriteTimeLow;
|
|
internal uint ftLastWriteTimeHigh;
|
|
internal uint volumeSerialNumber;
|
|
internal uint fileSizeHigh;
|
|
internal uint fileSizeLow;
|
|
internal uint numberOfLinks;
|
|
internal uint fileIndexHigh;
|
|
internal uint fileIndexLow;
|
|
}
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int lstrlenW(IntPtr ptr);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Ansi)]
|
|
internal static extern int lstrlenA(IntPtr ptr);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet = CharSet.Unicode, SetLastError = true)]
|
|
internal static extern bool MoveFileEx(string oldFilename, string newFilename, UInt32 flags);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, SetLastError=true)]
|
|
internal static extern bool CloseHandle(IntPtr handle);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, SetLastError=true)]
|
|
internal static extern bool FindClose(IntPtr hndFindFile);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, SetLastError=true, CharSet=CharSet.Unicode)]
|
|
internal static extern IntPtr FindFirstFile(
|
|
string pFileName, out WIN32_FIND_DATA pFindFileData);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, SetLastError=true, CharSet=CharSet.Unicode)]
|
|
internal static extern bool FindNextFile(
|
|
IntPtr hndFindFile, out WIN32_FIND_DATA pFindFileData);
|
|
|
|
internal const int GetFileExInfoStandard = 0;
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, SetLastError=true, CharSet=CharSet.Unicode)]
|
|
internal static extern bool GetFileAttributesEx(string name, int fileInfoLevel, out WIN32_FILE_ATTRIBUTE_DATA data);
|
|
|
|
#if !FEATURE_PAL // FEATURE_PAL native imports
|
|
[DllImport(ModName.KERNEL32_FULL_NAME)]
|
|
internal extern static int GetProcessAffinityMask(
|
|
IntPtr handle,
|
|
out IntPtr processAffinityMask,
|
|
out IntPtr systemAffinityMask);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal extern static int GetComputerName(StringBuilder nameBuffer, ref int bufferSize);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal /*public*/ extern static int GetModuleFileName(IntPtr module, StringBuilder filename, int size);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal /*public*/ extern static IntPtr GetModuleHandle(string moduleName);
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack=1)]
|
|
public struct SYSTEM_INFO {
|
|
public ushort wProcessorArchitecture;
|
|
public ushort wReserved;
|
|
public uint dwPageSize;
|
|
public IntPtr lpMinimumApplicationAddress;
|
|
public IntPtr lpMaximumApplicationAddress;
|
|
public IntPtr dwActiveProcessorMask;
|
|
public uint dwNumberOfProcessors;
|
|
public uint dwProcessorType;
|
|
public uint dwAllocationGranularity;
|
|
public ushort wProcessorLevel;
|
|
public ushort wProcessorRevision;
|
|
};
|
|
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void GetSystemInfo(out SYSTEM_INFO si);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode, SetLastError=true)]
|
|
internal static extern IntPtr LoadLibrary(string libFilename);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, SetLastError=true)]
|
|
internal static extern bool FreeLibrary(IntPtr hModule);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode, SetLastError=true)]
|
|
internal static extern IntPtr FindResource(IntPtr hModule, IntPtr lpName, IntPtr lpType);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode, SetLastError=true)]
|
|
internal static extern int SizeofResource(IntPtr hModule, IntPtr hResInfo);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode, SetLastError=true)]
|
|
internal static extern IntPtr LoadResource(IntPtr hModule, IntPtr hResInfo);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode, SetLastError=true)]
|
|
internal static extern IntPtr LockResource(IntPtr hResData);
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
public extern static IntPtr LocalFree(IntPtr pMem);
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
|
|
internal struct MEMORYSTATUSEX {
|
|
internal int dwLength;
|
|
internal int dwMemoryLoad;
|
|
internal long ullTotalPhys;
|
|
internal long ullAvailPhys;
|
|
internal long ullTotalPageFile;
|
|
internal long ullAvailPageFile;
|
|
internal long ullTotalVirtual;
|
|
internal long ullAvailVirtual;
|
|
internal long ullAvailExtendedVirtual;
|
|
|
|
internal void Init() {
|
|
dwLength = Marshal.SizeOf(typeof(UnsafeNativeMethods.MEMORYSTATUSEX));
|
|
}
|
|
}
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal extern static int GlobalMemoryStatusEx(ref MEMORYSTATUSEX memoryStatusEx);
|
|
|
|
#else // !FEATURE_PAL
|
|
internal static int GetProcessAffinityMask(
|
|
IntPtr handle,
|
|
out IntPtr processAffinityMask,
|
|
out IntPtr systemAffinityMask)
|
|
{
|
|
// ROTORTODO - PAL should supply GetProcessAffinityMask
|
|
|
|
// The only code that calls here is in SystemInfo::GetNumProcessCPUs and
|
|
// it fails graciously if we return 0
|
|
processAffinityMask = IntPtr.Zero;
|
|
systemAffinityMask = IntPtr.Zero;
|
|
return 0; // fail
|
|
}
|
|
|
|
internal static IntPtr GetModuleHandle(string moduleName)
|
|
{
|
|
// ROTORTODO
|
|
// So we never find any modules, so what? :-)
|
|
return IntPtr.Zero;
|
|
}
|
|
|
|
internal static int GlobalMemoryStatusEx(ref MEMORYSTATUSEX memoryStatusEx)
|
|
{
|
|
// ROTORTODO
|
|
// This API is called from two places in CacheMemoryTotalMemoryPressure
|
|
// Does it fail gracefully if the API fails?
|
|
return 0;
|
|
}
|
|
|
|
internal static void AppDomainRestart(string appId)
|
|
{
|
|
// ROTORTODO
|
|
// Do Nothing
|
|
}
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode, SetLastError=true, EntryPoint="PAL_GetUserTempDirectoryW")]
|
|
internal extern static bool GetUserTempDirectory(DeploymentDirectoryType ddt, StringBuilder sb, ref UInt32 length);
|
|
|
|
// The order should be the same as in rotor_pal.h
|
|
internal enum DeploymentDirectoryType
|
|
{
|
|
ddtInstallationDependentDirectory = 0,
|
|
ddtInstallationIndependentDirectory
|
|
}
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CharSet=CharSet.Unicode, SetLastError=true, EntryPoint="PAL_GetMachineConfigurationDirectoryW")]
|
|
internal extern static bool GetMachineConfigurationDirectory(StringBuilder sb, ref UInt32 length);
|
|
|
|
#endif // !FEATURE_PAL
|
|
|
|
|
|
[DllImport(ModName.KERNEL32_FULL_NAME)]
|
|
internal static extern IntPtr GetCurrentThread();
|
|
|
|
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa366569(v=vs.85).aspx
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CallingConvention = CallingConvention.Winapi, SetLastError = true)]
|
|
internal static extern IntPtr GetProcessHeap();
|
|
|
|
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa366701(v=vs.85).aspx
|
|
[DllImport(ModName.KERNEL32_FULL_NAME, CallingConvention = CallingConvention.Winapi, SetLastError = true)]
|
|
internal static extern bool HeapFree(
|
|
[In] IntPtr hHeap,
|
|
[In] uint dwFlags,
|
|
[In] IntPtr lpMem);
|
|
|
|
/*
|
|
* webengine.dll
|
|
*/
|
|
|
|
#if !FEATURE_PAL // FEATURE_PAL does not enable IIS-based hosting features
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode, BestFitMapping=false)]
|
|
internal static extern void AppDomainRestart(string appId);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int AspCompatProcessRequest(AspCompatCallback callback, [MarshalAs(UnmanagedType.Interface)] Object context, bool sharedActivity, int activityHash);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int AspCompatOnPageStart([MarshalAs(UnmanagedType.Interface)] Object obj);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int AspCompatOnPageEnd();
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int AspCompatIsApartmentComponent([MarshalAs(UnmanagedType.Interface)] Object obj);
|
|
|
|
#endif // !FEATURE_PAL
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int AttachDebugger(string clsId, string sessId, IntPtr userToken);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int ChangeAccessToKeyContainer(string containerName, string accountName, string csp, int options);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int CookieAuthParseTicket (byte [] pData,
|
|
int iDataLen,
|
|
StringBuilder szName,
|
|
int iNameLen,
|
|
StringBuilder szData,
|
|
int iUserDataLen,
|
|
StringBuilder szPath,
|
|
int iPathLen,
|
|
byte [] pBytes,
|
|
long [] pDates);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int CookieAuthConstructTicket (byte [] pData,
|
|
int iDataLen,
|
|
string szName,
|
|
string szData,
|
|
string szPath,
|
|
byte [] pBytes,
|
|
long [] pDates);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern IntPtr CreateUserToken(string name, string password, int fImpersonationToken, StringBuilder strError, int iErrorSize);
|
|
|
|
internal const uint FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001;
|
|
internal const uint FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002;
|
|
internal const uint FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004;
|
|
internal const uint FILE_NOTIFY_CHANGE_SIZE = 0x00000008;
|
|
internal const uint FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010;
|
|
internal const uint FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020;
|
|
internal const uint FILE_NOTIFY_CHANGE_CREATION = 0x00000040;
|
|
internal const uint FILE_NOTIFY_CHANGE_SECURITY = 0x00000100;
|
|
|
|
internal const uint RDCW_FILTER_FILE_AND_DIR_CHANGES =
|
|
FILE_NOTIFY_CHANGE_FILE_NAME |
|
|
FILE_NOTIFY_CHANGE_DIR_NAME |
|
|
FILE_NOTIFY_CHANGE_CREATION |
|
|
FILE_NOTIFY_CHANGE_SIZE |
|
|
FILE_NOTIFY_CHANGE_LAST_WRITE |
|
|
FILE_NOTIFY_CHANGE_SECURITY;
|
|
|
|
|
|
internal const uint RDCW_FILTER_FILE_CHANGES =
|
|
FILE_NOTIFY_CHANGE_FILE_NAME |
|
|
FILE_NOTIFY_CHANGE_CREATION |
|
|
FILE_NOTIFY_CHANGE_SIZE |
|
|
FILE_NOTIFY_CHANGE_LAST_WRITE |
|
|
FILE_NOTIFY_CHANGE_SECURITY;
|
|
|
|
internal const uint RDCW_FILTER_DIR_RENAMES = FILE_NOTIFY_CHANGE_DIR_NAME;
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void GetDirMonConfiguration(out int FCNMode);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void DirMonClose(HandleRef dirMon, bool fNeedToDispose);
|
|
|
|
#if !FEATURE_PAL // FEATURE_PAL does not enable file change notification
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int DirMonOpen(string dir, string appId, bool watchSubtree, uint notifyFilter, int fcnMode, NativeFileChangeNotification callback, out IntPtr pCompletion);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int GrowFileNotificationBuffer( string appId, bool fWatchSubtree );
|
|
#endif // !FEATURE_PAL
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void EcbFreeExecUrlEntityInfo(IntPtr pEntity);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetBasics(IntPtr pECB, byte[] buffer, int size, int[] contentInfo);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetBasicsContentInfo(IntPtr pECB, int[] contentInfo);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetTraceFlags(IntPtr pECB, int[] contentInfo);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet = CharSet.Unicode)]
|
|
internal static extern int EcbEmitSimpleTrace(IntPtr pECB, int type, string eventData);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet = CharSet.Unicode)]
|
|
internal static extern int EcbEmitWebEventTrace(
|
|
IntPtr pECB,
|
|
int webEventType,
|
|
int fieldCount,
|
|
string[] fieldNames,
|
|
int[] fieldTypes,
|
|
string[] fieldData);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetClientCertificate(IntPtr pECB, byte[] buffer, int size, int [] pInts, long [] pDates);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetExecUrlEntityInfo(int entityLength, byte[] entity, out IntPtr ppEntity);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetTraceContextId(IntPtr pECB, out Guid traceContextId);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern int EcbGetServerVariable(IntPtr pECB, string name, byte[] buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetServerVariableByIndex(IntPtr pECB, int nameIndex, byte[] buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern int EcbGetQueryString(IntPtr pECB, int encode, StringBuilder buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern int EcbGetUnicodeServerVariable(IntPtr pECB, string name, IntPtr buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetUnicodeServerVariableByIndex(IntPtr pECB, int nameIndex, IntPtr buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetUnicodeServerVariables(IntPtr pECB, IntPtr buffer, int bufferSizeInChars, int[] serverVarLengths, int serverVarCount, int startIndex, ref int requiredSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetVersion(IntPtr pECB);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetQueryStringRawBytes(IntPtr pECB, byte[] buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetPreloadedPostedContent(IntPtr pECB, byte[] bytes, int offset, int bufferSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbGetAdditionalPostedContent(IntPtr pECB, byte[] bytes, int offset, int bufferSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbReadClientAsync(IntPtr pECB, int dwBytesToRead, AsyncCompletionCallback pfnCallback);
|
|
|
|
#if !FEATURE_PAL
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbFlushCore(IntPtr pECB,
|
|
byte[] status,
|
|
byte[] header,
|
|
int keepConnected,
|
|
int totalBodySize,
|
|
int numBodyFragments,
|
|
IntPtr[] bodyFragments,
|
|
int[] bodyFragmentLengths,
|
|
int doneWithSession,
|
|
int finalStatus,
|
|
int kernelCache,
|
|
int async,
|
|
ISAPIAsyncCompletionCallback asyncCompletionCallback);
|
|
|
|
#endif // !FEATURE_PAL
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbIsClientConnected(IntPtr pECB);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbCloseConnection(IntPtr pECB);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern int EcbMapUrlToPath(IntPtr pECB, string url, byte[] buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern IntPtr EcbGetImpersonationToken(IntPtr pECB, IntPtr processHandle);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern IntPtr EcbGetVirtualPathToken(IntPtr pECB, IntPtr processHandle);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern int EcbAppendLogParameter(IntPtr pECB, string logParam);
|
|
|
|
#if !FEATURE_PAL
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int EcbExecuteUrlUnicode(IntPtr pECB,
|
|
string url,
|
|
string method,
|
|
string childHeaders,
|
|
bool sendHeaders,
|
|
bool addUserIndo,
|
|
IntPtr token,
|
|
string name,
|
|
string authType,
|
|
IntPtr pEntity,
|
|
ISAPIAsyncCompletionCallback asyncCompletionCallback);
|
|
|
|
#endif // !FEATURE_PAL
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void InvalidateKernelCache(string key);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void FreeFileSecurityDescriptor(IntPtr securityDesciptor);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode, SetLastError=true)]
|
|
internal static extern IntPtr GetFileHandleForTransmitFile(string strFile);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern IntPtr GetFileSecurityDescriptor(string strFile);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int GetGroupsForUser(IntPtr token, StringBuilder allGroups, int allGrpSize, StringBuilder error, int errorSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int GetHMACSHA1Hash(byte[] data1, int dataOffset1, int dataSize1, byte[] data2, int dataSize2,
|
|
byte[] innerKey, int innerKeySize, byte[] outerKey, int outerKeySize,
|
|
byte[] hash, int hashSize);
|
|
|
|
#if !FEATURE_PAL
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int GetPrivateBytesIIS6(out long privatePageCount, bool nocache);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int GetProcessMemoryInformation(uint pid, out uint privatePageCount, out uint peakPagefileUsage, bool nocache);
|
|
|
|
#else // !FEATURE_PAL
|
|
internal static int GetProcessMemoryInformation(uint pid, out uint privatePageCount, out uint peakPagefileUsage, bool nocache)
|
|
{
|
|
// ROTORTODO
|
|
// called from CacheMemoryPrivateBytesPressure.GetCurrentPressure;
|
|
// returning 0 causes it to ignore memory pressure
|
|
privatePageCount = 0;
|
|
peakPagefileUsage = 0;
|
|
return 0;
|
|
}
|
|
#endif // !FEATURE_PAL
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int GetSHA1Hash(byte[] data, int dataSize,
|
|
byte[] hash, int hashSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int GetW3WPMemoryLimitInKB();
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
[SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage", Justification = "This isn't a dangerous method.")]
|
|
internal static extern void SetClrThreadPoolLimits(int maxWorkerThreads, int maxIoThreads, bool autoConfig);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void SetMinRequestsExecutingToDetectDeadlock(int minRequestsExecutingToDetectDeadlock);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void InitializeLibrary(bool reduceMaxThreads);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void PerfCounterInitialize();
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void InitializeHealthMonitor(int deadlockIntervalSeconds, int requestQueueLimit);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int IsAccessToFileAllowed(IntPtr securityDesciptor, IntPtr iThreadToken, int iAccess);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int IsUserInRole(IntPtr token, string rolename, StringBuilder error, int errorSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void UpdateLastActivityTimeForHealthMonitor();
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode, BestFitMapping=false)]
|
|
internal static extern int GetCredentialFromRegistry(String strRegKey, StringBuilder buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, BestFitMapping=false)]
|
|
internal static extern int EcbGetChannelBindingToken(IntPtr pECB, out IntPtr token, out int tokenSize);
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// List of functions supported by PMCallISAPI
|
|
//
|
|
// ATTENTION!!
|
|
// If you change this list, make sure it is in sync with the
|
|
// CallISAPIFunc enum in ecbdirect.h
|
|
//
|
|
internal enum CallISAPIFunc : int {
|
|
GetSiteServerComment = 1,
|
|
RestrictIISFolders = 2,
|
|
CreateTempDir = 3,
|
|
GetAutogenKeys = 4,
|
|
GenerateToken = 5
|
|
};
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EcbCallISAPI(IntPtr pECB, UnsafeNativeMethods.CallISAPIFunc iFunction, byte[] bufferIn, int sizeIn, byte[] bufferOut, int sizeOut);
|
|
|
|
// Constants as defined in ndll.h
|
|
public const int RESTRICT_BIN =0x00000001;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Passport Auth
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int PassportVersion();
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportCreateHttpRaw(
|
|
string szRequestLine,
|
|
string szHeaders,
|
|
int fSecure,
|
|
StringBuilder szBufOut,
|
|
int dwRetBufSize,
|
|
ref IntPtr passportManager);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportTicket(
|
|
IntPtr pManager,
|
|
string szAttr,
|
|
out object pReturn);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportGetCurrentConfig(
|
|
IntPtr pManager,
|
|
string szAttr,
|
|
out object pReturn);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportLogoutURL(
|
|
IntPtr pManager,
|
|
string szReturnURL,
|
|
string szCOBrandArgs,
|
|
int iLangID,
|
|
string strDomain,
|
|
int iUseSecureAuth,
|
|
StringBuilder szAuthVal,
|
|
int iAuthValSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportGetOption(
|
|
IntPtr pManager,
|
|
string szOption,
|
|
out Object vOut);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportSetOption(
|
|
IntPtr pManager,
|
|
string szOption,
|
|
Object vOut);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportGetLoginChallenge(
|
|
IntPtr pManager,
|
|
string szRetURL,
|
|
int iTimeWindow,
|
|
int fForceLogin,
|
|
string szCOBrandArgs,
|
|
int iLangID,
|
|
string strNameSpace,
|
|
int iKPP,
|
|
int iUseSecureAuth,
|
|
object vExtraParams,
|
|
StringBuilder szOut,
|
|
int iOutSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportHexPUID(
|
|
IntPtr pManager,
|
|
StringBuilder szOut,
|
|
int iOutSize);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportCreate (string szQueryStrT,
|
|
string szQueryStrP,
|
|
string szAuthCookie,
|
|
string szProfCookie,
|
|
string szProfCCookie,
|
|
StringBuilder szAuthCookieRet,
|
|
StringBuilder szProfCookieRet,
|
|
int iRetBufSize,
|
|
ref IntPtr passportManager);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportAuthURL (
|
|
IntPtr iPassport,
|
|
string szReturnURL,
|
|
int iTimeWindow,
|
|
int fForceLogin,
|
|
string szCOBrandArgs,
|
|
int iLangID,
|
|
string strNameSpace,
|
|
int iKPP,
|
|
int iUseSecureAuth,
|
|
StringBuilder szAuthVal,
|
|
int iAuthValSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportAuthURL2 (
|
|
IntPtr iPassport,
|
|
string szReturnURL,
|
|
int iTimeWindow,
|
|
int fForceLogin,
|
|
string szCOBrandArgs,
|
|
int iLangID,
|
|
string strNameSpace,
|
|
int iKPP,
|
|
int iUseSecureAuth,
|
|
StringBuilder szAuthVal,
|
|
int iAuthValSize);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportGetError(IntPtr iPassport);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportDomainFromMemberName (
|
|
IntPtr iPassport,
|
|
string szDomain,
|
|
StringBuilder szMember,
|
|
int iMemberSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int PassportGetFromNetworkServer (IntPtr iPassport);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportGetDomainAttribute (
|
|
IntPtr iPassport,
|
|
string szAttributeName,
|
|
int iLCID,
|
|
string szDomain,
|
|
StringBuilder szValue,
|
|
int iValueSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportHasProfile (
|
|
IntPtr iPassport,
|
|
string szProfile);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportHasFlag (
|
|
IntPtr iPassport,
|
|
int iFlagMask);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportHasConsent (
|
|
IntPtr iPassport,
|
|
int iFullConsent,
|
|
int iNeedBirthdate);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportGetHasSavedPassword (IntPtr iPassport);
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportHasTicket (IntPtr iPassport);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportIsAuthenticated (
|
|
IntPtr iPassport,
|
|
int iTimeWindow,
|
|
int fForceLogin,
|
|
int iUseSecureAuth);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportLogoTag (
|
|
IntPtr iPassport,
|
|
string szRetURL,
|
|
int iTimeWindow,
|
|
int fForceLogin,
|
|
string szCOBrandArgs,
|
|
int iLangID,
|
|
int fSecure,
|
|
string strNameSpace,
|
|
int iKPP,
|
|
int iUseSecureAuth,
|
|
StringBuilder szValue,
|
|
int iValueSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportLogoTag2 (
|
|
IntPtr iPassport,
|
|
string szRetURL,
|
|
int iTimeWindow,
|
|
int fForceLogin,
|
|
string szCOBrandArgs,
|
|
int iLangID,
|
|
int fSecure,
|
|
string strNameSpace,
|
|
int iKPP,
|
|
int iUseSecureAuth,
|
|
StringBuilder szValue,
|
|
int iValueSize);
|
|
|
|
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportGetProfile (
|
|
IntPtr iPassport,
|
|
string szProfile,
|
|
out Object rOut);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportGetTicketAge(IntPtr iPassport);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportGetTimeSinceSignIn(IntPtr iPassport);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void PassportDestroy(IntPtr iPassport);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportCrypt(
|
|
int iFunctionID,
|
|
string szSrc,
|
|
StringBuilder szDest,
|
|
int iDestLength);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int PassportCryptPut(
|
|
int iFunctionID,
|
|
string szSrc);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int PassportCryptIsValid();
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int PostThreadPoolWorkItem(WorkItemCallback callback);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern IntPtr InstrumentedMutexCreate(string name);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void InstrumentedMutexDelete(HandleRef mutex);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int InstrumentedMutexGetLock(HandleRef mutex, int timeout);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int InstrumentedMutexReleaseLock(HandleRef mutex);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void InstrumentedMutexSetState(HandleRef mutex, int state);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode, BestFitMapping=false)]
|
|
internal static extern int IsapiAppHostMapPath(String appId, String virtualPath, StringBuilder buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode, BestFitMapping=false)]
|
|
internal static extern int IsapiAppHostGetAppPath(String aboPath, StringBuilder buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode, BestFitMapping=false)]
|
|
internal static extern int IsapiAppHostGetUncUser(String appId, StringBuilder usernameBuffer, int usernameSize, StringBuilder passwordBuffer, int passwordSize);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode, BestFitMapping=false)]
|
|
internal static extern int IsapiAppHostGetSiteName(String appId, StringBuilder buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode, BestFitMapping=false)]
|
|
internal static extern int IsapiAppHostGetSiteId(String site, StringBuilder buffer, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode, BestFitMapping=false)]
|
|
internal static extern int IsapiAppHostGetNextVirtualSubdir(String aboPath, bool inApp, ref int index, StringBuilder sb, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, BestFitMapping=false)]
|
|
internal static extern IntPtr BufferPoolGetPool(int bufferSize, int maxFreeListCount);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, BestFitMapping=false)]
|
|
internal static extern IntPtr BufferPoolGetBuffer(IntPtr pool);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, BestFitMapping=false)]
|
|
internal static extern void BufferPoolReleaseBuffer(IntPtr buffer);
|
|
|
|
|
|
/*
|
|
* ASPNET_WP.EXE
|
|
*/
|
|
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetTraceContextId")]
|
|
internal static extern int PMGetTraceContextId(IntPtr pMsg, out Guid traceContextId);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetHistoryTable")]
|
|
internal static extern int PMGetHistoryTable (int iRows,
|
|
int [] dwPIDArr,
|
|
int [] dwReqExecuted,
|
|
int [] dwReqPending,
|
|
int [] dwReqExecuting,
|
|
int [] dwReasonForDeath,
|
|
int [] dwPeakMemoryUsed,
|
|
long [] tmCreateTime,
|
|
long [] tmDeathTime);
|
|
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetCurrentProcessInfo")]
|
|
internal static extern int PMGetCurrentProcessInfo (ref int dwReqExecuted,
|
|
ref int dwReqExecuting,
|
|
ref int dwPeakMemoryUsed,
|
|
ref long tmCreateTime,
|
|
ref int pid);
|
|
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetMemoryLimitInMB")]
|
|
internal static extern int PMGetMemoryLimitInMB ();
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetBasics")]
|
|
internal static extern int PMGetBasics(IntPtr pMsg, byte[] buffer, int size, int[] contentInfo);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME)]
|
|
internal static extern int PMGetClientCertificate(IntPtr pMsg, byte[] buffer, int size, int [] pInts, long [] pDates);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME)]
|
|
internal static extern long PMGetStartTimeStamp(IntPtr pMsg);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetAllServerVariables")]
|
|
internal static extern int PMGetAllServerVariables(IntPtr pMsg, byte[] buffer, int size);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetQueryString", CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern int PMGetQueryString(IntPtr pMsg, int encode, StringBuilder buffer, int size);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetQueryStringRawBytes")]
|
|
internal static extern int PMGetQueryStringRawBytes(IntPtr pMsg, byte[] buffer, int size);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetPreloadedPostedContent")]
|
|
internal static extern int PMGetPreloadedPostedContent(IntPtr pMsg, byte[] bytes, int offset, int bufferSize);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetAdditionalPostedContent")]
|
|
internal static extern int PMGetAdditionalPostedContent(IntPtr pMsg, byte[] bytes, int offset, int bufferSize);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMEmptyResponse")]
|
|
internal static extern int PMEmptyResponse(IntPtr pMsg);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMIsClientConnected")]
|
|
internal static extern int PMIsClientConnected(IntPtr pMsg);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMCloseConnection")]
|
|
internal static extern int PMCloseConnection(IntPtr pMsg);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMMapUrlToPath", CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern int PMMapUrlToPath(IntPtr pMsg, string url, byte[] buffer, int size);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetImpersonationToken")]
|
|
internal static extern IntPtr PMGetImpersonationToken(IntPtr pMsg);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMGetVirtualPathToken")]
|
|
internal static extern IntPtr PMGetVirtualPathToken(IntPtr pMsg);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMAppendLogParameter", CharSet=CharSet.Ansi, BestFitMapping=false)]
|
|
internal static extern int PMAppendLogParameter(IntPtr pMsg, string logParam);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, EntryPoint="PMFlushCore")]
|
|
internal static extern int PMFlushCore(IntPtr pMsg,
|
|
byte[] status,
|
|
byte[] header,
|
|
int keepConnected,
|
|
int totalBodySize,
|
|
int bodyFragmentsOffset,
|
|
int numBodyFragments,
|
|
IntPtr[] bodyFragments,
|
|
int[] bodyFragmentLengths,
|
|
int doneWithSession,
|
|
int finalStatus);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME)]
|
|
internal static extern int PMCallISAPI(IntPtr pECB, UnsafeNativeMethods.CallISAPIFunc iFunction, byte[] bufferIn, int sizeIn, byte[] bufferOut, int sizeOut);
|
|
|
|
// perf counters support
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern IntPtr PerfOpenGlobalCounters();
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern IntPtr PerfOpenStateCounters();
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern PerfInstanceDataHandle PerfOpenAppCounters(string AppName);
|
|
|
|
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void PerfCloseAppCounters(IntPtr pCounters);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void PerfIncrementCounter(IntPtr pCounters, int number);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void PerfDecrementCounter(IntPtr pCounters, int number);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void PerfIncrementCounterEx(IntPtr pCounters, int number, int increment);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void PerfSetCounter(IntPtr pCounters, int number, int increment);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int PerfGetCounter(IntPtr pCounters, int number);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void GetEtwValues(out int level, out int flags);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void TraceRaiseEventMgdHandler(int eventType, IntPtr pRequestContext, string data1, string data2, string data3, string data4);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void TraceRaiseEventWithEcb(int eventType, IntPtr ecb, string data1, string data2, string data3, string data4);
|
|
|
|
[DllImport(ModName.WP_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void PMTraceRaiseEvent(int eventType, IntPtr pMsg, string data1, string data2, string data3, string data4);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int SessionNDConnectToService(string server);
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
internal struct SessionNDMakeRequestResults {
|
|
internal IntPtr socket;
|
|
internal int httpStatus;
|
|
internal int timeout;
|
|
internal int contentLength;
|
|
internal IntPtr content;
|
|
internal int lockCookie;
|
|
internal long lockDate;
|
|
internal int lockAge;
|
|
internal int stateServerMajVer;
|
|
internal int actionFlags;
|
|
internal int lastPhase;
|
|
};
|
|
|
|
internal enum SessionNDMakeRequestPhase {
|
|
Initialization = 0,
|
|
Connecting,
|
|
SendingRequest,
|
|
ReadingResponse
|
|
};
|
|
|
|
|
|
internal enum StateProtocolVerb {
|
|
GET = 1,
|
|
PUT = 2,
|
|
DELETE = 3,
|
|
HEAD = 4,
|
|
};
|
|
|
|
internal enum StateProtocolExclusive {
|
|
NONE = 0,
|
|
ACQUIRE = 1,
|
|
RELEASE = 2,
|
|
};
|
|
|
|
internal const int StateProtocolFlagUninitialized = 0x00000001;
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Ansi, BestFitMapping=false, ThrowOnUnmappableChar=true)]
|
|
internal static extern int SessionNDMakeRequest(
|
|
HandleRef socket,
|
|
string server,
|
|
int port,
|
|
bool forceIPv6,
|
|
int networkTimeout,
|
|
StateProtocolVerb verb,
|
|
string uri,
|
|
StateProtocolExclusive exclusive,
|
|
int extraFlags,
|
|
int timeout,
|
|
int lockCookie,
|
|
byte[] body,
|
|
int cb,
|
|
bool checkVersion,
|
|
out SessionNDMakeRequestResults results);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void SessionNDFreeBody(HandleRef body);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void SessionNDCloseConnection(HandleRef socket);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int TransactManagedCallback(TransactedExecCallback callback, int mode);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, SetLastError=true)]
|
|
internal static extern bool IsValidResource(IntPtr hModule, IntPtr ip, int size);
|
|
|
|
/*
|
|
* Fusion API's (now coming from mscorwks.dll)
|
|
*/
|
|
[DllImport(ModName.MSCORWKS_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int GetCachePath(int dwCacheFlags, StringBuilder pwzCachePath, ref int pcchPath);
|
|
|
|
#if !FEATURE_PAL
|
|
[DllImport(ModName.MSCORWKS_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int DeleteShadowCache(string pwzCachePath, string pwzAppName);
|
|
#else // !FEATURE_PAL
|
|
internal static int DeleteShadowCache(string pwzCachePath, string pwzAppName)
|
|
{
|
|
// ROTORTODO
|
|
return 0;
|
|
}
|
|
#endif // !FEATURE_PAL
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int InitializeWmiManager();
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet = CharSet.Unicode)]
|
|
internal static extern int DoesKeyContainerExist(string containerName, string provider, int useMachineContainer);
|
|
|
|
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
|
|
internal struct WmiData {
|
|
internal int eventType;
|
|
|
|
// WebBaseEvent + WebProcessInformation + WebApplicationInformation
|
|
internal int eventCode;
|
|
internal int eventDetailCode;
|
|
internal string eventTime;
|
|
internal string eventMessage;
|
|
internal string eventId;
|
|
internal string sequenceNumber;
|
|
internal string occurrence;
|
|
internal int processId;
|
|
internal string processName;
|
|
internal string accountName;
|
|
internal string machineName;
|
|
internal string appDomain;
|
|
internal string trustLevel;
|
|
internal string appVirtualPath;
|
|
internal string appPath;
|
|
|
|
internal string details;
|
|
|
|
// WebRequestInformation
|
|
internal string requestUrl;
|
|
internal string requestPath;
|
|
internal string userHostAddress;
|
|
internal string userName;
|
|
internal bool userAuthenticated;
|
|
internal string userAuthenticationType;
|
|
internal string requestThreadAccountName;
|
|
|
|
// WebProcessStatistics
|
|
internal string processStartTime;
|
|
internal int threadCount;
|
|
internal string workingSet;
|
|
internal string peakWorkingSet;
|
|
internal string managedHeapSize;
|
|
internal int appdomainCount;
|
|
internal int requestsExecuting;
|
|
internal int requestsQueued;
|
|
internal int requestsRejected;
|
|
|
|
// WebThreadInformation
|
|
internal int threadId;
|
|
internal string threadAccountName;
|
|
internal string stackTrace;
|
|
internal bool isImpersonating;
|
|
|
|
// Exception
|
|
internal string exceptionType;
|
|
internal string exceptionMessage;
|
|
|
|
internal string nameToAuthenticate;
|
|
|
|
// ViewStateException
|
|
internal string remoteAddress;
|
|
internal string remotePort;
|
|
internal string userAgent;
|
|
internal string persistedState;
|
|
internal string referer;
|
|
internal string path;
|
|
};
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int RaiseWmiEvent(
|
|
ref WmiData pWmiData,
|
|
bool IsInAspCompatMode
|
|
);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern int RaiseEventlogEvent(
|
|
int eventType, string[] dataFields, int size);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void LogWebeventProviderFailure(
|
|
string appUrl,
|
|
string providerName,
|
|
string exception);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern IntPtr GetEcb(
|
|
IntPtr pHttpCompletion);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern void SetDoneWithSessionCalled(
|
|
IntPtr pHttpCompletion);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void ReportUnhandledException(
|
|
string eventInfo);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME, CharSet=CharSet.Unicode)]
|
|
internal static extern void RaiseFileMonitoringEventlogEvent(
|
|
string eventInfo,
|
|
string path,
|
|
string appVirtualPath,
|
|
int hr);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int StartPrefetchActivity(
|
|
uint ulActivityId);
|
|
|
|
[DllImport(ModName.ENGINE_FULL_NAME)]
|
|
internal static extern int EndPrefetchActivity(
|
|
uint ulActivityId);
|
|
|
|
[DllImport(ModName.FILTER_FULL_NAME)]
|
|
internal static extern IntPtr GetExtensionlessUrlAppendage();
|
|
|
|
[DllImport(ModName.OLE32_FULL_NAME, CharSet = CharSet.Unicode)]
|
|
internal static extern int CoCreateInstanceEx(ref Guid clsid, IntPtr pUnkOuter,
|
|
int dwClsContext, [In, Out] COSERVERINFO srv,
|
|
int num, [In, Out] MULTI_QI[] amqi);
|
|
|
|
[DllImport(ModName.OLE32_FULL_NAME, CharSet = CharSet.Unicode)]
|
|
internal static extern int CoCreateInstanceEx(ref Guid clsid, IntPtr pUnkOuter,
|
|
int dwClsContext, [In, Out] COSERVERINFO_X64 srv,
|
|
int num, [In, Out] MULTI_QI_X64[] amqi);
|
|
[DllImport(ModName.OLE32_FULL_NAME, CharSet = CharSet.Unicode)]
|
|
internal static extern int CoSetProxyBlanket(IntPtr pProxy, RpcAuthent authent, RpcAuthor author,
|
|
string serverprinc, RpcLevel level, RpcImpers
|
|
impers,
|
|
IntPtr ciptr, int dwCapabilities);
|
|
|
|
#if FEATURE_PAL // FEATURE_PAL-specific perf counter constants
|
|
// PerfCounters support
|
|
internal static int FILE_MAP_READ = 0x00000004;
|
|
internal static int FILE_MAP_WRITE = 0x00000002; // same as FILE_MAP_ALL_ACCESS
|
|
internal static uint PAGE_READONLY = 0x00000002;
|
|
internal static uint PAGE_READWRITE = 0x00000004;
|
|
internal static int ERROR_FILE_NOT_FOUND = 0x00000002;
|
|
#endif // FEATURE_pAL
|
|
|
|
}
|
|
}
|
|
|