[PATCH] Allow building of kernel32.dll with w32api
Casper Hornstrup <[email protected]>
| Newsgroups | gmane.comp.gnu.mingw.patches |
|---|---|
| Message-ID | <[email protected]> |
This patch makes it possible to build a kernel32.dll by defining WINBASEAPI to not be attribute dllimport. The patch also moves a few structures that will be shared between the SDK and DDK to a central location in order to avoid potential conflicts when including headers from both developer kits at the same time. 2002-06-15 Casper S. Hornstrup <[email protected]> * include/ntshared.h: New file for shared definitions between SDK and DDK. * include/winbase.h (WINBASEAPI): Wrap in #ifndef WINBASEAPI so we can avoid importing symbols when building Win32 base API DLLs. (ntshared.h): Include. (THREAD_PRIORITY_*, EXCEPTION_*, _FILETIME, LPTHREAD_START_ROUTINE, _SYSTEMTIME, _ACL_INFORMATION_CLASS, _TIME_ZONE_INFORMATION, PTIMERAPCROUTINE): Move to ntshared.h. (BackupRead, BackupSeek, BackupWrite, FileTimeToLocalFileTime, GetAce, GetPrivateProfileStructW, GetTickCount, InterlockedExchangeAdd, WritePrivateProfileStructA): Correct prototypes. (InterlockedCompareExchange, InterlockedCompareExchangePointer, InterlockedDecrement, InterlockedExchange, InterlockedExchangePointer, InterlockedExchangeAdd, InterlockedIncrement): Wrap in #ifndef __INTERLOCKED_DECLARED since kernel mode versions have different prototypes. (GetEnvironmentStringsA): Remove duplicate definition. * include/winioctl.h (ntshared.h): Include. (CTL_CODE, DEVICE_TYPE): Move to ntshared.h. (PARTITION_FAT32, PARTITION_FAT32_XINT13, PARTITION_XINT13, PARTITION_XINT13_EXTENDED, PARTITION_PREP, PARTITION_LDM, PARTITION_UNIX): Add defines. (PDRIVE_LAYOUT_INFORMATION): Add typedef. (IsRecognizedPartition): Also check for PARTITION_FAT32, PARTITION_FAT32_XINT13, and PARTITION_XINT13. (IsContainerPartition): Add macro. Index: include/winbase.h =================================================================== RCS file: /cvsroot/mingw/w32api/include/winbase.h,v retrieving revision 1.11 diff -b -u -r1.11 winbase.h --- include/winbase.h 9 Apr 2002 21:17:17 -0000 1.11 +++ include/winbase.h 15 Jun 2002 14:15:00 -0000 @@ -4,11 +4,15 @@ #pragma GCC system_header #endif +#ifndef WINBASEAPI #define WINBASEAPI DECLSPEC_IMPORT +#endif #ifdef __cplusplus extern "C" { #endif +#include "ntshared.h" + #define SP_SERIALCOMM 1 #define PST_UNSPECIFIED 0 #define PST_RS232 1 @@ -229,14 +233,6 @@ #define GET_TAPE_DRIVE_INFORMATION 1 #define SET_TAPE_MEDIA_INFORMATION 0 #define SET_TAPE_DRIVE_INFORMATION 1 -#define THREAD_PRIORITY_ABOVE_NORMAL 1 -#define THREAD_PRIORITY_BELOW_NORMAL (-1) -#define THREAD_PRIORITY_HIGHEST 2 -#define THREAD_PRIORITY_IDLE (-15) -#define THREAD_PRIORITY_LOWEST (-2) -#define THREAD_PRIORITY_NORMAL 0 -#define THREAD_PRIORITY_TIME_CRITICAL 15 -#define THREAD_PRIORITY_ERROR_RETURN 2147483647 #define TIME_ZONE_ID_UNKNOWN 0 #define TIME_ZONE_ID_STANDARD 1 #define TIME_ZONE_ID_DAYLIGHT 2 @@ -401,9 +397,6 @@ #define SLE_MINORERROR 2 #define SLE_WARNING 3 #define SHUTDOWN_NORETRY 1 -#define EXCEPTION_EXECUTE_HANDLER 1 -#define EXCEPTION_CONTINUE_EXECUTION (-1) -#define EXCEPTION_CONTINUE_SEARCH 0 #define MAXINTATOM 0xC000 #define INVALID_ATOM ((ATOM)0) #define IGNORE 0 @@ -501,10 +494,6 @@ #define TLS_OUT_OF_INDEXES (DWORD)0xFFFFFFFF #ifndef RC_INVOKED -typedef struct _FILETIME { - DWORD dwLowDateTime; - DWORD dwHighDateTime; -} FILETIME,*PFILETIME,*LPFILETIME; typedef struct _BY_HANDLE_FILE_INFORMATION { DWORD dwFileAttributes; FILETIME ftCreationTime; @@ -596,7 +585,6 @@ DWORD cbInQue; DWORD cbOutQue; } COMSTAT,*LPCOMSTAT; -typedef DWORD (WINAPI *LPTHREAD_START_ROUTINE)(LPVOID); typedef struct _CREATE_PROCESS_DEBUG_INFO { HANDLE hFile; HANDLE hProcess; @@ -730,16 +718,6 @@ HANDLE LockSemaphore; DWORD SpinCount; } CRITICAL_SECTION,*PCRITICAL_SECTION,*LPCRITICAL_SECTION; -typedef struct _SYSTEMTIME { - WORD wYear; - WORD wMonth; - WORD wDayOfWeek; - WORD wDay; - WORD wHour; - WORD wMinute; - WORD wSecond; - WORD wMilliseconds; -} SYSTEMTIME,*LPSYSTEMTIME; typedef struct _WIN32_FILE_ATTRIBUTE_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; @@ -789,10 +767,6 @@ FindExSearchLimitToDevices, FindExSearchMaxSearchOp } FINDEX_SEARCH_OPS; -typedef enum _ACL_INFORMATION_CLASS { - AclRevisionInformation=1, - AclSizeInformation -} ACL_INFORMATION_CLASS; typedef struct tagHW_PROFILE_INFOA { DWORD dwDockInfo; CHAR szHwProfileGuid[HW_PROFILE_GUIDLEN]; @@ -833,15 +807,6 @@ DWORD BatteryLifeTime; DWORD BatteryFullLifeTime; } SYSTEM_POWER_STATUS,*LPSYSTEM_POWER_STATUS; -typedef struct _TIME_ZONE_INFORMATION { - LONG Bias; - WCHAR StandardName[32]; - SYSTEMTIME StandardDate; - LONG StandardBias; - WCHAR DaylightName[32]; - SYSTEMTIME DaylightDate; - LONG DaylightBias; -} TIME_ZONE_INFORMATION,*LPTIME_ZONE_INFORMATION; typedef struct _MEMORYSTATUS { DWORD dwLength; DWORD dwMemoryLoad; @@ -919,7 +884,6 @@ typedef LONG(CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(LPEXCEPTION_POINTERS); typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER; typedef void(APIENTRY *PAPCFUNC)(DWORD); -typedef void(CALLBACK *PTIMERAPCROUTINE)(PVOID,DWORD,DWORD); #define MAKEINTATOM(i) (LPTSTR)((DWORD)((WORD)(i))) /* Functions */ #ifndef UNDER_CE @@ -955,9 +919,9 @@ BOOL WINAPI AreFileApisANSI(void); BOOL WINAPI BackupEventLogA(HANDLE,LPCSTR); BOOL WINAPI BackupEventLogW(HANDLE,LPCWSTR); -BOOL WINAPI BackupRead(HANDLE,PBYTE,DWORD,PDWORD,BOOL,BOOL,PVOID); -BOOL WINAPI BackupSeek(HANDLE,DWORD,DWORD,PDWORD,PDWORD,PVOID); -BOOL WINAPI BackupWrite(HANDLE,PBYTE,DWORD,PDWORD,BOOL,BOOL,PVOID); +BOOL WINAPI BackupRead(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*); +BOOL WINAPI BackupSeek(HANDLE,DWORD,DWORD,PDWORD,LPDWORD,LPVOID*); +BOOL WINAPI BackupWrite(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*); BOOL WINAPI Beep(DWORD,DWORD); HANDLE WINAPI BeginUpdateResourceA(LPCSTR,BOOL); HANDLE WINAPI BeginUpdateResourceW(LPCWSTR,BOOL); @@ -1068,7 +1032,7 @@ void WINAPI FatalAppExitW(UINT,LPCWSTR); void WINAPI FatalExit(int); BOOL WINAPI FileTimeToDosDateTime(CONST FILETIME *,LPWORD,LPWORD); -BOOL WINAPI FileTimeToLocalFileTime(FILETIME *,LPFILETIME); +BOOL WINAPI FileTimeToLocalFileTime(CONST FILETIME *,LPFILETIME); BOOL WINAPI FileTimeToSystemTime(CONST FILETIME *,LPSYSTEMTIME); ATOM WINAPI FindAtomA(LPCSTR); ATOM WINAPI FindAtomW(LPCWSTR); @@ -1103,7 +1067,7 @@ BOOL WINAPI FreeResource(HGLOBAL); #endif /* ndef XFree86Server */ PVOID WINAPI FreeSid(PSID); -BOOL WINAPI GetAce(PACL,DWORD,PVOID); +BOOL WINAPI GetAce(PACL,DWORD,LPVOID*); BOOL WINAPI GetAclInformation(PACL,PVOID,DWORD,ACL_INFORMATION_CLASS); UINT WINAPI GetAtomNameA(ATOM,LPSTR,int); UINT WINAPI GetAtomNameW(ATOM,LPWSTR,int); @@ -1189,7 +1153,7 @@ DWORD WINAPI GetPrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,DWORD,LPCSTR); DWORD WINAPI GetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,DWORD,LPCWSTR); BOOL WINAPI GetPrivateProfileStructA(LPCSTR,LPCSTR,PVOID,UINT,LPCSTR); -BOOL WINAPI GetPrivateProfileStructW(LPCWSTR,LPCWSTR,PVOID,UINT,LPCWSTR); +BOOL WINAPI GetPrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR); FARPROC WINAPI GetProcAddress(HINSTANCE,LPCSTR); BOOL WINAPI GetProcessAffinityMask(HANDLE,PDWORD,PDWORD); HANDLE WINAPI GetProcessHeap(VOID); @@ -1241,7 +1205,7 @@ BOOL WINAPI GetThreadPriorityBoost(HANDLE,PBOOL); BOOL WINAPI GetThreadSelectorEntry(HANDLE,DWORD,LPLDT_ENTRY); BOOL WINAPI GetThreadTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME); -DWORD WINAPI GetTickCount(void); +DWORD WINAPI GetTickCount(VOID); DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION); BOOL WINAPI GetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,DWORD,PDWORD); BOOL WINAPI GetUserNameA (LPSTR,PDWORD); @@ -1300,6 +1264,8 @@ #endif BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD); BOOL WINAPI InitializeSid (PSID,PSID_IDENTIFIER_AUTHORITY,BYTE); +#ifndef __INTERLOCKED_DECLARED +#define __INTERLOCKED_DECLARED LONG WINAPI InterlockedCompareExchange(LPLONG,LONG,LONG); /* PVOID WINAPI InterlockedCompareExchangePointer(PVOID*,PVOID,PVOID); */ #define InterlockedCompareExchangePointer(d,e,c) \ @@ -1309,8 +1275,9 @@ /* PVOID WINAPI InterlockedExchangePointer(PVOID*,PVOID); */ #define InterlockedExchangePointer(t,v) \ (PVOID)InterlockedExchange((LPLONG)(t),(LONG)(v)) -LONG WINAPI InterlockedExchangeAdd(PLONG,LONG); +LONG WINAPI InterlockedExchangeAdd(LPLONG,LONG); LONG WINAPI InterlockedIncrement(LPLONG); +#endif /* !__INTERLOCKED_DECLARED */ BOOL WINAPI IsBadCodePtr(FARPROC); BOOL WINAPI IsBadHugeReadPtr(PCVOID,UINT); BOOL WINAPI IsBadHugeWritePtr(PVOID,UINT); @@ -1562,7 +1529,7 @@ BOOL WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR); BOOL WINAPI WritePrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPCSTR); BOOL WINAPI WritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); -BOOL WINAPI WritePrivateProfileStructA(LPCSTR,LPCSTR,PVOID,UINT,LPCSTR); +BOOL WINAPI WritePrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR); BOOL WINAPI WritePrivateProfileStructW(LPCWSTR,LPCWSTR,PVOID,UINT,LPCWSTR); BOOL WINAPI WriteProcessMemory(HANDLE,PVOID,PVOID,DWORD,PDWORD); BOOL WINAPI WriteProfileSectionA(LPCSTR,LPCSTR); @@ -1763,7 +1730,6 @@ #define GetDiskFreeSpace GetDiskFreeSpaceA #define GetDiskFreeSpaceEx GetDiskFreeSpaceExA #define GetDriveType GetDriveTypeA -#define GetEnvironmentStringsA GetEnvironmentStrings #define GetEnvironmentVariable GetEnvironmentVariableA #define GetFileAttributes GetFileAttributesA #define GetFileSecurity GetFileSecurityA Index: include/winioctl.h =================================================================== RCS file: /cvsroot/mingw/w32api/include/winioctl.h,v retrieving revision 1.4 diff -b -u -r1.4 winioctl.h --- include/winioctl.h 9 Apr 2002 21:17:17 -0000 1.4 +++ include/winioctl.h 15 Jun 2002 14:15:01 -0000 @@ -7,10 +7,12 @@ #ifdef __cplusplus extern "C" { #endif + +#include "ntshared.h" + #define HIST_NO_OF_BUCKETS 24 #define HISTOGRAM_BUCKET_SIZE sizeof(HISTOGRAM_BUCKET) #define DISK_HISTOGRAM_SIZE sizeof(DISK_HISTOGRAM) -#define CTL_CODE(t,f,m,a) (((t)<<16)|((a)<<14)|((f)<<2)|(m)) #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE #define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS) #define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS) @@ -68,7 +70,6 @@ #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA) #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA) -#define DEVICE_TYPE DWORD #define FILE_DEVICE_BEEP 1 #define FILE_DEVICE_CD_ROM 2 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 3 @@ -134,6 +135,13 @@ #define PARTITION_EXTENDED 5 #define PARTITION_HUGE 6 #define PARTITION_IFS 7 +#define PARTITION_FAT32 0x0B +#define PARTITION_FAT32_XINT13 0x0C +#define PARTITION_XINT13 0x0E +#define PARTITION_XINT13_EXTENDED 0x0F +#define PARTITION_PREP 0x41 +#define PARTITION_LDM 0x42 +#define PARTITION_UNIX 0x63 #define PARTITION_PREP 0x41 #define PARTITION_UNIX 0x63 #define PARTITION_NTFT 128 @@ -260,7 +268,7 @@ DWORD PartitionCount; DWORD Signature; PARTITION_INFORMATION PartitionEntry[1]; -} DRIVE_LAYOUT_INFORMATION; +} DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION; typedef struct _PERF_BIN { DWORD NumberOfBins; DWORD TypeOfBin; @@ -281,14 +289,26 @@ LARGE_INTEGER StartingOffset; DWORD Length; } VERIFY_INFORMATION,*PVERIFY_INFORMATION; -#define IsRecognizedPartition(t) (((t&PARTITION_NTFT)&&((t&~0xC0)==PARTITION_FAT_12))||\ - ((t&PARTITION_NTFT)&&((t&~0xC0)==PARTITION_FAT_16))||\ - ((t&PARTITION_NTFT)&&((t&~0xC0)==PARTITION_IFS))||\ - ((t&PARTITION_NTFT)&&((t&~0xC0)==PARTITION_HUGE))||\ +#define IsRecognizedPartition(t)\ + (((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT_12))||\ + ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT_16))||\ + ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_IFS))||\ + ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_HUGE))||\ + ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT32))||\ + ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_FAT32_XINT13))||\ + ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_XINT13))||\ ((t&~PARTITION_NTFT)==PARTITION_FAT_12)||\ ((t&~PARTITION_NTFT)==PARTITION_FAT_16)||\ ((t&~PARTITION_NTFT)==PARTITION_IFS)||\ - ((t&~PARTITION_NTFT)==PARTITION_HUGE)) + ((t&~PARTITION_NTFT)==PARTITION_HUGE)||\ + ((t&~PARTITION_NTFT)==PARTITION_FAT32)||\ + ((t&~PARTITION_NTFT)==PARTITION_FAT32_XINT13)||\ + ((t&~PARTITION_NTFT)==PARTITION_XINT13)) +#define IsContainerPartition(t)\ + (((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_EXTENDED))||\ + ((t&PARTITION_NTFT)&&((t&~VALID_NTFT)==PARTITION_XINT13_EXTENDED))||\ + ((t&~PARTITION_NTFT)==PARTITION_EXTENDED)||\ + ((t&~PARTITION_NTFT)==PARTITION_XINT13_EXTENDED)) #ifdef __cplusplus } #endif
ntshared.h
(text/x-c, 1.6 KB)
#ifndef _NTSHARED_H
#define _NTSHARED_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef RC_INVOKED
#define CTL_CODE(t,f,m,a) (((t)<<16)|((a)<<14)|((f)<<2)|(m))
typedef ULONG DEVICE_TYPE;
#include "winioctl.h"
#define EXCEPTION_EXECUTE_HANDLER 1
#define EXCEPTION_CONTINUE_EXECUTION (-1)
#define EXCEPTION_CONTINUE_SEARCH 0
#define THREAD_PRIORITY_ABOVE_NORMAL 1
#define THREAD_PRIORITY_BELOW_NORMAL (-1)
#define THREAD_PRIORITY_HIGHEST 2
#define THREAD_PRIORITY_IDLE (-15)
#define THREAD_PRIORITY_LOWEST (-2)
#define THREAD_PRIORITY_NORMAL 0
#define THREAD_PRIORITY_TIME_CRITICAL 15
#define THREAD_PRIORITY_ERROR_RETURN 2147483647
typedef DWORD (WINAPI *LPTHREAD_START_ROUTINE)(LPVOID);
typedef LPTHREAD_START_ROUTINE PTHREAD_START_ROUTINE;
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME,*PFILETIME,*LPFILETIME;
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME,*LPSYSTEMTIME;
typedef struct _TIME_ZONE_INFORMATION {
LONG Bias;
WCHAR StandardName[32];
SYSTEMTIME StandardDate;
LONG StandardBias;
WCHAR DaylightName[32];
SYSTEMTIME DaylightDate;
LONG DaylightBias;
} TIME_ZONE_INFORMATION,*PTIME_ZONE_INFORMATION,*LPTIME_ZONE_INFORMATION;
typedef enum _ACL_INFORMATION_CLASS {
AclRevisionInformation=1,
AclSizeInformation
} ACL_INFORMATION_CLASS;
typedef VOID (CALLBACK *PTIMERAPCROUTINE)(PVOID,DWORD,DWORD);
#endif
#ifdef __cplusplus
}
#endif
#endif