[NTOSKRNL] Fix CcIdleDelay initializer for old msvc versions (#339)
authorDavid Quintana <gigaherz@gmail.com>
Wed, 31 Jan 2018 17:12:57 +0000 (18:12 +0100)
committerGitHub <noreply@github.com>
Wed, 31 Jan 2018 17:12:57 +0000 (18:12 +0100)
[NTOSKRNL] Fix initialization of CcIdleDelay for msvc builds (fixes boot).
* Introduce a macro to initialize LARGE_INTEGERs in a consistent way.

ntoskrnl/cc/view.c
sdk/include/ndk/rtltypes.h

index 2520cab..003c5d8 100644 (file)
@@ -71,11 +71,7 @@ ULONG CcTotalDirtyPages = 0;
 LIST_ENTRY CcDeferredWrites;
 KSPIN_LOCK CcDeferredWriteSpinLock;
 LIST_ENTRY CcCleanSharedCacheMapList;
-#ifndef _MSC_VER
-LARGE_INTEGER CcIdleDelay = {.QuadPart = (LONGLONG)-1*1000*1000*10};
-#else
-LARGE_INTEGER CcIdleDelay = {(LONGLONG)-1*1000*1000*10};
-#endif
+LARGE_INTEGER CcIdleDelay = RTL_CONSTANT_LARGE_INTEGER((LONGLONG)-1*1000*1000*10);
 
 /* Internal vars (ROS):
  * - Event to notify lazy writer to shutdown
index 0ee0eb3..0abde3e 100644 (file)
@@ -403,6 +403,18 @@ extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
 
 #endif /* NTOS_MODE_USER */
 
+//
+// Constant Large Integer Macro
+//
+#ifdef NONAMELESSUNION
+C_ASSERT(FIELD_OFFSET(LARGE_INTEGER, u.LowPart) == 0);
+#else
+C_ASSERT(FIELD_OFFSET(LARGE_INTEGER, LowPart) == 0);
+#endif
+#define RTL_CONSTANT_LARGE_INTEGER(quad_part) { { (quad_part), (quad_part)>>32 } }
+#define RTL_MAKE_LARGE_INTEGER(low_part, high_part) { { (low_part), (high_part) } }
+
+
 #ifdef NTOS_MODE_USER
 
 //