- Add DDK alignment macros and move/rename the ones in the NDK for user-mode only...
authorAlex Ionescu <aionescu@gmail.com>
Sun, 27 Nov 2005 02:55:13 +0000 (02:55 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Sun, 27 Nov 2005 02:55:13 +0000 (02:55 +0000)
- Fix helper.h's alignment macros to protect properly and also use a faster implementation.
- Update NDK readme.

svn path=/trunk/; revision=19666

12 files changed:
reactos/boot/freeldr/freeldr/include/freeldr.h
reactos/drivers/fs/vfat/vfat.h
reactos/include/ndk/extypes.h
reactos/include/ndk/fixmes.txt
reactos/include/ndk/lpctypes.h
reactos/include/ndk/ntndk.h
reactos/include/ndk/readme.txt
reactos/include/ndk/umtypes.h
reactos/include/reactos/helper.h
reactos/lib/crt/precomp.h
reactos/lib/rtl/rtl.h
reactos/w32api/include/ddk/winddk.h

index 8328a9c..08671cf 100644 (file)
@@ -70,6 +70,7 @@
 /* Externals */
 #include <reactos/rossym.h>
 #include <reactos/buildno.h>
+#include <reactos/helper.h>
 /* Needed if debuging is enabled */
 #include <comm.h>
 
index d1056b6..d1f8f1d 100644 (file)
@@ -1,6 +1,7 @@
 #include <debug.h>
 #include <ntifs.h>
 #include <ntdddisk.h>
+#include <reactos/helper.h>
 
 #ifdef __GNUC__
 #include <ndk/ntndk.h>
index 07af4cc..c34808d 100644 (file)
@@ -178,7 +178,7 @@ typedef enum _SYSTEM_INFORMATION_CLASS
     SystemPrioritySeperation,
     SystemPlugPlayBusInformation,
     SystemDockInformation,
-    _SystemPowerInformation, // FIXME 
+    SystemPowerInformationNative,
     SystemProcessorSpeedInformation,
     SystemCurrentTimeZoneInformation,
     SystemLookasideInformation,
@@ -988,8 +988,7 @@ typedef struct _SYSTEM_DOCK_INFORMATION
 } SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION;
 
 // Class 42
-// FIXME: Conflict with WINNT.H 
-typedef struct __SYSTEM_POWER_INFORMATION
+typedef struct _SYSTEM_POWER_INFORMATION_NATIVE
 {
     BOOLEAN SystemSuspendSupported;
     BOOLEAN SystemHibernateSupported;
@@ -1001,7 +1000,7 @@ typedef struct __SYSTEM_POWER_INFORMATION
     BOOLEAN SystemAcOrDc;
     BOOLEAN PowerDownDisabled;
     LARGE_INTEGER SpindownDrives;
-} _SYSTEM_POWER_INFORMATION, *P_SYSTEM_POWER_INFORMATION;
+} SYSTEM_POWER_INFORMATION_NATIVE, *PSYSTEM_POWER_INFORMATION_NATIVE;
 
 // Class 43
 typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION
index c84eeb2..178bb78 100644 (file)
@@ -17,12 +17,8 @@ ________________________________________________________________________________
 |rtltypes.h    - PPF_ Defines don't seem to be the real names (try to find them).\r
 |rtltypes.h    - _RTL_PROCESS_BACKTRACE_INFORMATION isn't done.\r
 |haltypes.h    - Multi-Boot flags are ReactOS Only.\r
-|extypes.h     - SystemPowerInformation in SYSTEM_INFORMATION_CLASS causes conflict.\r
 |extypes.h     - _RUNDOWN_DESCRIPTOR is possibly incorrect/unofficial.\r
-|asm.h         - Selector names are not official.\r
-|extypes.h     - Class 42 (SYSTEM_POWER_INFORMATION causes conflict).\r
 |extypes.h     - Classes 13, 20, 30, 31, 49, 51, 52, 54+ are undefined.\r
-|ntndk.h       - Incorrect rounding macro names\r
 |_____________________________________________________________________________________\r
 \r
 \r
@@ -113,4 +109,4 @@ subsys\smss\smss.h: #include <ndk/ntndk.h>
 subsys\system\cmd\precomp.h: #include <ndk/ntndk.h>\r
 subsys\system\services\services.h: #include <ndk/ntndk.h>\r
 subsys\system\taskmgr\precomp.h: #include <ndk/ntndk.h>\r
-subsys\system\usetup\usetup.h: #include <ndk/ntndk.h>
\ No newline at end of file
+subsys\system\usetup\usetup.h: #include <ndk/ntndk.h>\r
index 5936172..911e4e8 100644 (file)
@@ -234,9 +234,9 @@ typedef struct _CLIENT_DIED_MSG
 // Maximum total Kernel-Mode LPC Message Structure Size
 //
 #define LPCP_MAX_MESSAGE_SIZE \
-    ROUND_UP(PORT_MAXIMUM_MESSAGE_LENGTH + \
+    ALIGN_UP(PORT_MAXIMUM_MESSAGE_LENGTH + \
     sizeof(LPCP_MESSAGE) + \
-    sizeof(LPCP_CONNECTION_MESSAGE), 16)
+    sizeof(LPCP_CONNECTION_MESSAGE), sizeof(ULONGLONG) * 2)
 
 //
 // Maximum actual LPC Message Length
index 8036e08..27e3c80 100644 (file)
@@ -19,14 +19,6 @@ Author:
 #ifndef _NTNDK_
 #define _NTNDK_
 
-//
-// FIXME: Rounding Macros
-//
-#define ROUNDUP(a,b)        ((((a)+(b)-1)/(b))*(b))
-#define ROUNDDOWN(a,b)      (((a)/(b))*(b))
-#define ROUND_UP            ROUNDUP
-#define ROUND_DOWN          ROUNDDOWN
-
 #include <stdarg.h>         // C Standard Header
 #include <umtypes.h>        // General Definitions
 
index a9bbc9d..acff107 100644 (file)
@@ -116,6 +116,55 @@ you would like to be credited for it.
 \r
 3. USAGE\r
 \r
-3.1 TODO (COPY FROM WIKI)\r
-\r
-... TODO ... (COPY FROM WIKI)\r
+3.1 ORGANIZATION\r
+\r
+   * The NDK is organized in a main folder (include/ndk) with arch-specific subfolders (ex: include/ndk/i386). \r
+   * The NDK is structured by NT Subsystem Component (ex: ex, ps, rtl, etc). \r
+   * The NDK can either be included on-demand (#include <ndk/xxxxx.h>) or globally (#include <ndk/ntndk.h>).\r
+     The former is recommended to reduce compile time. \r
+   * The NDK is structured by function and type. Every Subsystem Component has an associated "xxfuncs.h" and\r
+    "xxtypes.h" header, where "xx" is the Subsystem (ex: iofuncs.h, iotypes.h) \r
+   * The NDK has a special file called "umtypes.h" which exports to User-Mode or Native-Mode Applications the\r
+     basic NT types which are present in ntdef.h. This file cannot be included since it would conflict with\r
+     winnt.h and/or windef.h. Thus, umtypes.h provides the missing types. This file is automatically included\r
+     in a User-Mode NDK project. \r
+   * The NDK also includes a file called "umfuncs.h" which exports to User-Mode or Native-Mode Applications\r
+     undocumented functions which can only be accessed from ntdll.dll. \r
+   * The NDK has another special file called "ifssupp.h", which exports to Kernel-Mode drivers a few types which\r
+     are only documented in the IFS kit, and are part of some native definitions. It will be deprecated next year\r
+     with the release of the WDK. \r
+\r
+3.2 USING IN YOUR PROJECT\r
+\r
+    *  User Mode Application requiring Native Types: \r
+\r
+       #define WIN32_NO_STATUS   /* Tell Windows headers you'll use ntstatus.s from NDK */\r
+       #include <windows.h>      /* Declare Windows Headers like you normally would */\r
+       #include <ntndk.h>        /* Declare the NDK Headers */\r
+\r
+    * Native Mode Application: \r
+\r
+       #include <windows.h>      /* Declare Windows Headers for basic types. NEEDED UNTIL NDK 1.5 */\r
+       #include <ntndk.h>        /* Declare the NDK Headers */\r
+\r
+    * Kernel Mode Driver: \r
+\r
+       #include <ntddk.h>       /* Declare DDK Headers like you normally would */\r
+       #include <ntndk.h>       /* Declare the NDK Headers */\r
+\r
+    * You may also include only the files you need (example for User-Mode application):\r
+\r
+       #define WIN32_NO_STATUS   /* Tell Windows headers you'll use ntstatus.s from NDK */\r
+       #include <windows.h>      /* Declare Windows Headers like you normally would */\r
+       #include <rtlfuncs.h>     /* Declare the Rtl* Functions */\r
+\r
+3.3 CAVEATS\r
+\r
+    * winternl.h: This header, part of the PSDK, was released by Microsoft as part of one of the governmen\r
+      lawsuits against it, and documents a certain (minimal) part of the Native API and/or types. Unforunately,\r
+      Microsoft decided to hack the Native Types and to define them incorrectly, replacing real members by "reserved"\r
+      ones. As such, you 'cannot include winternl.h in any project that uses the NDK. Note however, that the NDK fully\r
+      replaces it and retains compatibility with any project that used it.\r
+    * Native programs: Native programs must include "windows.h" until the next release of the NDK (1.5). The upcoming\r
+      version will automatically detect the lack of missing types and include them. Note however that you will still need\r
+      to have the PSDK installed.\r
index bbbe74d..b479bc5 100644 (file)
@@ -60,6 +60,21 @@ Author:
 #endif
 #endif
 
+//
+// Alignment Macros
+//
+#define ALIGN_DOWN(s, t) \
+    ((ULONG)(s) & ~(sizeof(t) - 1))
+
+#define ALIGN_UP(s, t) \
+    (ALIGN_DOWN(((ULONG)(s) + sizeof(t) - 1), t))
+
+#define ALIGN_DOWN_POINTER(p, t) \
+    ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1)))
+
+#define ALIGN_UP_POINTER(p, t) \
+    (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t))
+
 //
 // Native API Return Value Macros
 //
index c5fa443..c7d933e 100644 (file)
@@ -1,20 +1,22 @@
 #ifndef _HELPER_H
 #define _HELPER_H
 
-#ifndef ROUNDUP
-#define ROUNDUP(a,b)   ((((a)+(b)-1)/(b))*(b))
+#ifndef ROUND_UP
+#define ROUND_UP(n, align) \
+    ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
 #endif
 
-#ifndef ROUNDUP
-#define ROUNDDOWN(a,b) (((a)/(b))*(b))
+#ifndef ROUND_DOWN
+#define ROUND_DOWN(n, align) \
+    (((ULONG)n) & ~((align) - 1l))
 #endif
 
-#ifndef ROUND_UP
-#define ROUND_UP ROUNDUP
+#ifndef ROUNDUP
+#define ROUNDUP ROUND_UP
 #endif
 
-#ifndef ROUND_DOWN
-#define ROUND_DOWN ROUNDDOWN
+#ifndef ROUNDDOWN
+#define ROUNDDOWN ROUND_DOWN
 #endif
 
 #ifndef PAGE_ROUND_DOWN
index ca85a3f..6af39a1 100644 (file)
 #include <math.h>
 #include <limits.h>
 
+/* PSDK/NDK Headers */
 #define WIN32_NO_STATUS
 #include <windows.h>
-#define NTOS_MODE_USER
 #include <ndk/ntndk.h>
+#include <reactos/helper.h>
 
 #if !defined(_MSC_VER)
   #include <stdint.h>
index 14cb71f..e80b348 100644 (file)
@@ -23,6 +23,7 @@
 #include <ndk/ntndk.h>
 
 /* Internal RTL header */
+#include <reactos/helper.h>
 #include "rtlp.h"
 
 /* EOF */
index d6cf0b9..6d2423c 100644 (file)
@@ -97,6 +97,21 @@ extern "C" {
 #endif
 #endif
 
+/*
+ * Alignment Macros
+ */
+#define ALIGN_DOWN(s, t) \
+    ((ULONG)(s) & ~(sizeof(t) - 1))
+
+#define ALIGN_UP(s, t) \
+    (ALIGN_DOWN(((ULONG)(s) + sizeof(t) - 1), t))
+
+#define ALIGN_DOWN_POINTER(p, t) \
+    ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1)))
+
+#define ALIGN_UP_POINTER(p, t) \
+    (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t))
+
 /*
 ** Forward declarations
 */