|
//------------------------------------------------------------------------------
// <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
}
}
|