[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.