windows-nt/Source/XPSP1/NT/public/internal/base/inc/winbasep.h
2020-09-26 16:20:57 +08:00

470 lines
9.7 KiB
C

/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
winbasep.h
Abstract:
Private
Procedure declarations, constant definitions and macros for the Base
component.
--*/
#ifndef _WINBASEP_
#define _WINBASEP_
#ifdef __cplusplus
extern "C" {
#endif
#define FILE_FLAG_GLOBAL_HANDLE 0x00800000
#define FILE_FLAG_MM_CACHED_FILE_HANDLE 0x00400000
WINBASEAPI
DWORD
WINAPI
HeapCreateTagsW(
IN HANDLE hHeap,
IN DWORD dwFlags,
IN LPCWSTR lpTagPrefix,
IN LPCWSTR lpTagNames
);
typedef struct _HEAP_TAG_INFO {
DWORD dwNumberOfAllocations;
DWORD dwNumberOfFrees;
DWORD dwBytesAllocated;
} HEAP_TAG_INFO, *PHEAP_TAG_INFO;
typedef PHEAP_TAG_INFO LPHEAP_TAG_INFO;
WINBASEAPI
LPCWSTR
WINAPI
HeapQueryTagW(
IN HANDLE hHeap,
IN DWORD dwFlags,
IN WORD wTagIndex,
IN BOOL bResetCounters,
OUT LPHEAP_TAG_INFO TagInfo
);
typedef struct _HEAP_SUMMARY {
DWORD cb;
SIZE_T cbAllocated;
SIZE_T cbCommitted;
SIZE_T cbReserved;
SIZE_T cbMaxReserve;
} HEAP_SUMMARY, *PHEAP_SUMMARY;
typedef PHEAP_SUMMARY LPHEAP_SUMMARY;
BOOL
WINAPI
HeapSummary(
IN HANDLE hHeap,
IN DWORD dwFlags,
OUT LPHEAP_SUMMARY lpSummary
);
BOOL
WINAPI
HeapExtend(
IN HANDLE hHeap,
IN DWORD dwFlags,
IN LPVOID lpBase,
IN DWORD dwBytes
);
typedef struct _HEAP_USAGE_ENTRY {
struct _HEAP_USAGE_ENTRY *lpNext;
PVOID lpAddress;
DWORD dwBytes;
DWORD dwReserved;
} HEAP_USAGE_ENTRY, *PHEAP_USAGE_ENTRY;
typedef struct _HEAP_USAGE {
DWORD cb;
SIZE_T cbAllocated;
SIZE_T cbCommitted;
SIZE_T cbReserved;
SIZE_T cbMaxReserve;
PHEAP_USAGE_ENTRY lpEntries;
PHEAP_USAGE_ENTRY lpAddedEntries;
PHEAP_USAGE_ENTRY lpRemovedEntries;
DWORD Reserved[ 8 ];
} HEAP_USAGE, *PHEAP_USAGE;
BOOL
WINAPI
HeapUsage(
IN HANDLE hHeap,
IN DWORD dwFlags,
IN BOOL bFirstCall,
IN BOOL bLastCall,
OUT PHEAP_USAGE lpUsage
);
#define HFINDFILE HANDLE //
#define INVALID_HFINDFILE ((HFINDFILE)-1) //
typedef DWORD (*PFNWAITFORINPUTIDLE)(HANDLE hProcess, DWORD dwMilliseconds);
VOID RegisterWaitForInputIdle(PFNWAITFORINPUTIDLE);
#define STARTF_HASSHELLDATA 0x00000400
#define STARTF_TITLEISLINKNAME 0x00000800
WINBASEAPI
BOOL
WINAPI
CreateProcessInternalA(
IN HANDLE hUserToken,
IN LPCSTR lpApplicationName,
IN LPSTR lpCommandLine,
IN LPSECURITY_ATTRIBUTES lpProcessAttributes,
IN LPSECURITY_ATTRIBUTES lpThreadAttributes,
IN BOOL bInheritHandles,
IN DWORD dwCreationFlags,
IN LPVOID lpEnvironment,
IN LPCSTR lpCurrentDirectory,
IN LPSTARTUPINFOA lpStartupInfo,
OUT LPPROCESS_INFORMATION lpProcessInformation,
OUT PHANDLE hRestrictedUserToken
);
WINBASEAPI
BOOL
WINAPI
CreateProcessInternalW(
IN HANDLE hUserToken,
IN LPCWSTR lpApplicationName,
IN LPWSTR lpCommandLine,
IN LPSECURITY_ATTRIBUTES lpProcessAttributes,
IN LPSECURITY_ATTRIBUTES lpThreadAttributes,
IN BOOL bInheritHandles,
IN DWORD dwCreationFlags,
IN LPVOID lpEnvironment,
IN LPCWSTR lpCurrentDirectory,
IN LPSTARTUPINFOW lpStartupInfo,
OUT LPPROCESS_INFORMATION lpProcessInformation,
OUT PHANDLE hRestrictedUserToken
);
#ifdef UNICODE
#define CreateProcessInternal CreateProcessInternalW
#else
#define CreateProcessInternal CreateProcessInternalA
#endif // !UNICODE
#if (_WIN32_WINNT >= 0x0500)
#define PRIVCOPY_FILE_METADATA 0x010 // Copy compression, DACL, (encryption)
#define PRIVCOPY_FILE_SACL 0x020 // Copy SACL
#define PRIVCOPY_FILE_OWNER_GROUP 0x040 // Copy owner & group
#define PRIVCOPY_FILE_DIRECTORY 0x080 // Copy directory file like a file
#define PRIVCOPY_FILE_BACKUP_SEMANTICS 0x100 // Use FILE_FLAG_BACKUP_SEMANTICS on open/creates.
#define PRIVCOPY_FILE_SUPERSEDE 0x200 // Replace original dest with source
#define PRIVCOPY_FILE_SKIP_DACL 0x400 // Workaround for csc/roamprofs
#define PRIVCOPY_FILE_VALID_FLAGS (PRIVCOPY_FILE_METADATA|PRIVCOPY_FILE_SACL|PRIVCOPY_FILE_OWNER_GROUP|PRIVCOPY_FILE_DIRECTORY|PRIVCOPY_FILE_SUPERSEDE|PRIVCOPY_FILE_BACKUP_SEMANTICS|PRIVCOPY_FILE_SKIP_DACL)
#define PRIVPROGRESS_REASON_NOT_HANDLED 4
#define PRIVCALLBACK_STREAMS_NOT_SUPPORTED 2
#define PRIVCALLBACK_COMPRESSION_NOT_SUPPORTED 5
#define PRIVCALLBACK_COMPRESSION_FAILED 6
#define PRIVCALLBACK_ENCRYPTION_NOT_SUPPORTED 8
#define PRIVCALLBACK_ENCRYPTION_FAILED 9
#define PRIVCALLBACK_EAS_NOT_SUPPORTED 10
#define PRIVCALLBACK_SPARSE_NOT_SUPPORTED 11
#define PRIVCALLBACK_SPARSE_FAILED 12
#define PRIVCALLBACK_DACL_ACCESS_DENIED 13
#define PRIVCALLBACK_OWNER_GROUP_ACCESS_DENIED 14
#define PRIVCALLBACK_OWNER_GROUP_FAILED 19
#define PRIVCALLBACK_SACL_ACCESS_DENIED 15
#define PRIVCALLBACK_SECURITY_INFORMATION_NOT_SUPPORTED 16
#define PRIVCALLBACK_CANT_ENCRYPT_SYSTEM_FILE 17
#define PRIVMOVE_FILEID_DELETE_OLD_FILE 0x01
#define PRIVMOVE_FILEID_IGNORE_ID_ERRORS 0x02
BOOL
APIENTRY
PrivMoveFileIdentityW(
LPCWSTR lpOldFileName,
LPCWSTR lpNewFileName,
DWORD dwFlags
);
BOOL
APIENTRY
PrivCopyFileExW(
LPCWSTR lpExistingFileName,
LPCWSTR lpNewFileName,
LPPROGRESS_ROUTINE lpProgressRoutine OPTIONAL,
LPVOID lpData OPTIONAL,
LPBOOL pbCancel OPTIONAL,
DWORD dwCopyFlags
);
#endif // (_WIN32_WINNT >= 0x0500)
//#define ACTCTX_FLAG_LIKE_CREATEPROCESS (0x00000100)
BOOL
WINAPI
CloseProfileUserMapping( VOID );
BOOL
WINAPI
OpenProfileUserMapping( VOID );
BOOL
WINAPI
QueryWin31IniFilesMappedToRegistry(
IN DWORD Flags,
OUT PWSTR Buffer,
IN DWORD cchBuffer,
OUT LPDWORD cchUsed
);
#define WIN31_INIFILES_MAPPED_TO_SYSTEM 0x00000001
#define WIN31_INIFILES_MAPPED_TO_USER 0x00000002
typedef BOOL (WINAPI *PWIN31IO_STATUS_CALLBACK)(
IN PWSTR Status,
IN PVOID CallbackParameter
);
typedef enum _WIN31IO_EVENT {
Win31SystemStartEvent,
Win31LogonEvent,
Win31LogoffEvent
} WIN31IO_EVENT;
#define WIN31_MIGRATE_INIFILES 0x00000001
#define WIN31_MIGRATE_GROUPS 0x00000002
#define WIN31_MIGRATE_REGDAT 0x00000004
#define WIN31_MIGRATE_ALL (WIN31_MIGRATE_INIFILES | WIN31_MIGRATE_GROUPS | WIN31_MIGRATE_REGDAT)
DWORD
WINAPI
QueryWindows31FilesMigration(
IN WIN31IO_EVENT EventType
);
BOOL
WINAPI
SynchronizeWindows31FilesAndWindowsNTRegistry(
IN WIN31IO_EVENT EventType,
IN DWORD Flags,
IN PWIN31IO_STATUS_CALLBACK StatusCallBack,
IN PVOID CallbackParameter
);
typedef struct _VIRTUAL_BUFFER {
PVOID Base;
PVOID CommitLimit;
PVOID ReserveLimit;
} VIRTUAL_BUFFER, *PVIRTUAL_BUFFER;
BOOLEAN
WINAPI
CreateVirtualBuffer(
OUT PVIRTUAL_BUFFER Buffer,
IN ULONG CommitSize OPTIONAL,
IN ULONG ReserveSize OPTIONAL
);
int
WINAPI
VirtualBufferExceptionHandler(
IN ULONG ExceptionCode,
IN PEXCEPTION_POINTERS ExceptionInfo,
IN OUT PVIRTUAL_BUFFER Buffer
);
BOOLEAN
WINAPI
ExtendVirtualBuffer(
IN PVIRTUAL_BUFFER Buffer,
IN PVOID Address
);
BOOLEAN
WINAPI
TrimVirtualBuffer(
IN PVIRTUAL_BUFFER Buffer
);
BOOLEAN
WINAPI
FreeVirtualBuffer(
IN PVIRTUAL_BUFFER Buffer
);
//
// filefind stucture shared with ntvdm, jonle
// see mvdm\dos\dem\demsrch.c
//
typedef struct _FINDFILE_HANDLE {
HANDLE DirectoryHandle;
PVOID FindBufferBase;
PVOID FindBufferNext;
ULONG FindBufferLength;
ULONG FindBufferValidLength;
RTL_CRITICAL_SECTION FindBufferLock;
} FINDFILE_HANDLE, *PFINDFILE_HANDLE;
#define BASE_FIND_FIRST_DEVICE_HANDLE (HANDLE)1
WINBASEAPI
BOOL
WINAPI
GetDaylightFlag(VOID);
WINBASEAPI
BOOL
WINAPI
SetDaylightFlag(
BOOL fDaylight
);
WINBASEAPI
BOOL
WINAPI
FreeLibrary16(
HINSTANCE hLibModule
);
WINBASEAPI
FARPROC
WINAPI
GetProcAddress16(
HINSTANCE hModule,
LPCSTR lpProcName
);
WINBASEAPI
HINSTANCE
WINAPI
LoadLibrary16(
LPCSTR lpLibFileName
);
WINBASEAPI
BOOL
APIENTRY
NukeProcess(
DWORD ppdb,
UINT uExitCode,
DWORD ulFlags);
WINBASEAPI
HGLOBAL
WINAPI
GlobalAlloc16(
UINT uFlags,
DWORD dwBytes
);
WINBASEAPI
LPVOID
WINAPI
GlobalLock16(
HGLOBAL hMem
);
WINBASEAPI
BOOL
WINAPI
GlobalUnlock16(
HGLOBAL hMem
);
WINBASEAPI
HGLOBAL
WINAPI
GlobalFree16(
HGLOBAL hMem
);
WINBASEAPI
DWORD
WINAPI
GlobalSize16(
HGLOBAL hMem
);
WINBASEAPI
DWORD
WINAPI
RegisterServiceProcess(
IN DWORD dwProcessId,
IN DWORD dwServiceType
);
#define RSP_UNREGISTER_SERVICE 0x00000000
#define RSP_SIMPLE_SERVICE 0x00000001
WINBASEAPI
VOID
WINAPI
ReinitializeCriticalSection(
IN LPCRITICAL_SECTION lpCriticalSection
);
//
// New Multi-User specific routines to support per session
// network driver mappings. Related to Wksvc changes
//
WINBASEAPI
BOOL
WINAPI
DosPathToSessionPathA(
IN DWORD SessionId,
IN LPCSTR pInPath,
OUT LPSTR *ppOutPath
);
WINBASEAPI
BOOL
WINAPI
DosPathToSessionPathW(
IN DWORD SessionId,
IN LPCWSTR pInPath,
OUT LPWSTR *ppOutPath
);
//terminal server time zone support
BOOL
WINAPI
SetClientTimeZoneInformation(
IN CONST TIME_ZONE_INFORMATION *ptzi
);
#ifdef UNICODE
#define DosPathToSessionPath DosPathToSessionPathW
#else
#define DosPathToSessionPath DosPathToSessionPathA
#endif // !UNICODE
#define COMPLUS_ENABLE_64BIT 0x00000001
#define COMPLUS_INSTALL_FLAGS_INVALID (~(COMPLUS_ENABLE_64BIT))
ULONG
WINAPI
GetComPlusPackageInstallStatus(
VOID
);
BOOL
WINAPI
SetComPlusPackageInstallStatus(
ULONG ComPlusPackage
);
#ifdef __cplusplus
}
#endif
#endif // ndef _WINBASEP_