summaryrefslogtreecommitdiff
path: root/open-vm-tools/modules/shared/vmmemctl/kernelStubs.h
diff options
context:
space:
mode:
Diffstat (limited to 'open-vm-tools/modules/shared/vmmemctl/kernelStubs.h')
-rw-r--r--open-vm-tools/modules/shared/vmmemctl/kernelStubs.h176
1 files changed, 146 insertions, 30 deletions
diff --git a/open-vm-tools/modules/shared/vmmemctl/kernelStubs.h b/open-vm-tools/modules/shared/vmmemctl/kernelStubs.h
index 2fecd043..d0a53ad7 100644
--- a/open-vm-tools/modules/shared/vmmemctl/kernelStubs.h
+++ b/open-vm-tools/modules/shared/vmmemctl/kernelStubs.h
@@ -1,5 +1,5 @@
/*********************************************************
- * Copyright (C) 2006 VMware, Inc. All rights reserved.
+ * Copyright (C) 2006-2015 VMware, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
@@ -26,9 +26,6 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of VMware Inc. nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission of VMware Inc.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
@@ -69,6 +66,21 @@
#ifndef __KERNELSTUBS_H__
#define __KERNELSTUBS_H__
+#define KRNL_STUBS_DRIVER_TYPE_POSIX 1
+#define KRNL_STUBS_DRIVER_TYPE_GDI 2
+#define KRNL_STUBS_DRIVER_TYPE_WDM 3
+#define KRNL_STUBS_DRIVER_TYPE_NDIS 4
+
+// For now (vsphere-2015), choose a good default. Later we'll modify all the
+// build files using KernelStubs to set this.
+#ifndef KRNL_STUBS_DRIVER_TYPE
+# if defined(_WIN32)
+# define KRNL_STUBS_DRIVER_TYPE KRNL_STUBS_DRIVER_TYPE_WDM
+# else
+# define KRNL_STUBS_DRIVER_TYPE KRNL_STUBS_DRIVER_TYPE_POSIX
+# endif
+#endif
+
#ifdef linux
# ifndef __KERNEL__
# error "__KERNEL__ is not defined"
@@ -78,12 +90,32 @@
# include <linux/kernel.h>
# include <linux/string.h>
#elif defined(_WIN32)
-# include "vm_basic_types.h"
-# include <ntddk.h> /* kernel memory APIs */
-# include <stdio.h> /* for _vsnprintf, vsprintf */
-# include <stdarg.h> /* for va_start stuff */
-# include <stdlib.h> /* for min macro. */
-# include "vm_assert.h" /* Our assert macros */
+# define _CRT_ALLOCATION_DEFINED // prevent malloc.h from defining malloc et. all
+# if KRNL_STUBS_DRIVER_TYPE == KRNL_STUBS_DRIVER_TYPE_GDI
+# include <d3d9.h>
+# include <winddi.h>
+# include <stdio.h>
+# include "vm_basic_types.h"
+# include "vm_basic_defs.h"
+# include "vm_assert.h"
+# elif KRNL_STUBS_DRIVER_TYPE == KRNL_STUBS_DRIVER_TYPE_NDIS
+# include "vm_basic_types.h"
+# include <ndis.h>
+# elif KRNL_STUBS_DRIVER_TYPE == KRNL_STUBS_DRIVER_TYPE_WDM
+# include "vm_basic_types.h"
+# if defined(NTDDI_WINXP) && (NTDDI_VERSION >= NTDDI_WINXP)
+# include <wdm.h> /* kernel memory APIs, DbgPrintEx */
+# else
+# include <ntddk.h> /* kernel memory APIs */
+# endif
+# include <stdio.h> /* for _vsnprintf, vsprintf */
+# include <stdarg.h> /* for va_start stuff */
+# include <stdlib.h> /* for min macro. */
+# include "vm_basic_defs.h"
+# include "vm_assert.h" /* Our assert macros */
+# else
+# error Type KRNL_STUBS_DRIVER_TYPE must be defined.
+# endif
#elif defined(__FreeBSD__)
# include "vm_basic_types.h"
# ifndef _KERNEL
@@ -107,6 +139,7 @@
# include <sys/types.h>
# include <sys/varargs.h>
#endif
+#include "kernelStubsSal.h"
/*
* Function Prototypes
@@ -126,19 +159,41 @@ void *realloc(void *ptr, size_t newSize);
#elif defined(_WIN32) /* } else if (_WIN32) { */
-#if (_WIN32_WINNT == 0x0400)
-/* The following declarations are missing on NT4. */
-typedef unsigned int UINT_PTR;
-typedef unsigned int SIZE_T;
+_Ret_allocates_malloc_mem_opt_bytecap_(_Size)
+_When_windrv_(_IRQL_requires_max_(DISPATCH_LEVEL))
+_CRTNOALIAS _CRTRESTRICT
+void * __cdecl malloc(
+ _In_ size_t _Size);
-/* No free with tag availaible on NT4 kernel! */
-#define KRNL_STUBS_FREE(P,T) ExFreePool((P))
+_Ret_allocates_malloc_mem_opt_bytecount_(_Count*_Size)
+_When_windrv_(_IRQL_requires_max_(DISPATCH_LEVEL))
+_CRTNOALIAS _CRTRESTRICT
+void * __cdecl calloc(
+ _In_ size_t _Count,
+ _In_ size_t _Size);
-#else /* _WIN32_WINNT */
-#define KRNL_STUBS_FREE(P,T) ExFreePoolWithTag((P),(T))
-/* Win 2K and later useful kernel function, documented but not declared! */
-NTKERNELAPI VOID ExFreePoolWithTag(IN PVOID P, IN ULONG Tag);
-#endif /* _WIN32_WINNT */
+_When_windrv_(_IRQL_requires_max_(DISPATCH_LEVEL))
+_CRTNOALIAS
+void __cdecl free(
+ _In_frees_malloc_mem_opt_ void * _Memory);
+
+_Success_(return != 0)
+_When_(_Memory != 0, _Ret_reallocates_malloc_mem_opt_newbytecap_oldbytecap_(_NewSize, ((uintptr_t*)_Memory)[-1]))
+_When_(_Memory == 0, _Ret_reallocates_malloc_mem_opt_newbytecap_(_NewSize))
+_When_windrv_(_IRQL_requires_max_(DISPATCH_LEVEL))
+_CRTNOALIAS _CRTRESTRICT
+void * __cdecl realloc(
+ _In_reallocates_malloc_mem_opt_oldptr_ void * _Memory,
+ _In_ size_t _NewSize);
+
+_Success_(return != 0)
+_Ret_allocates_malloc_mem_opt_z_
+_When_windrv_(_IRQL_requires_max_(DISPATCH_LEVEL))
+_CRTIMP
+char * __cdecl _strdup_impl(
+ _In_opt_z_ const char * _Src);
+
+#define strdup _strdup_impl
#elif defined(__FreeBSD__) /* } else if (FreeBSD) { */
@@ -169,23 +224,84 @@ __compat_malloc(unsigned long size, struct malloc_type *type, int flags) {
#endif /* } */
+_Ret_writes_z_(maxSize)
+char *Str_Strcpy(
+ _Out_z_cap_(maxSize) char *buf,
+ _In_z_ const char *src,
+ _In_ size_t maxSize);
+
+_Ret_writes_z_(maxSize)
+char *Str_Strcat(
+ _Inout_z_cap_(maxSize) char *buf,
+ _In_z_ const char *src,
+ _In_ size_t maxSize);
+
+_Success_(return >= 0)
+int Str_Sprintf(
+ _Out_z_cap_(maxSize) _Post_z_count_(return+1) char *buf,
+ _In_ size_t maxSize,
+ _In_z_ _Printf_format_string_ const char *fmt,
+ ...) PRINTF_DECL(3, 4);
+
+_Success_(return != -1)
+int Str_Vsnprintf(
+ _Out_z_cap_(size) _Post_z_count_(return+1) char *str,
+ _In_ size_t size,
+ _In_z_ _Printf_format_string_ const char *format,
+ _In_ va_list ap) PRINTF_DECL(3, 0);
+
+_Success_(return != 0)
+_When_(length != 0, _Ret_allocates_malloc_mem_opt_z_bytecount_(*length))
+_When_(length == 0, _Ret_allocates_malloc_mem_opt_z_)
+_When_windrv_(_IRQL_requires_max_(DISPATCH_LEVEL))
+char *Str_Vasprintf(
+ _Out_opt_ size_t *length,
+ _In_z_ _Printf_format_string_ const char *format,
+ _In_ va_list arguments) PRINTF_DECL(2, 0);
+
+_Success_(return != 0)
+_When_(length != 0, _Ret_allocates_malloc_mem_opt_z_bytecount_(*length))
+_When_(length == 0, _Ret_allocates_malloc_mem_opt_z_)
+_When_windrv_(_IRQL_requires_max_(DISPATCH_LEVEL))
+char *Str_Asprintf(
+ _Out_opt_ size_t *length,
+ _In_z_ _Printf_format_string_ const char *format,
+ ...) PRINTF_DECL(2, 3);
+
+#ifdef _WIN32
+#pragma warning(push)
+#pragma warning(disable: 28301) // Suppress complaint that first declaration lacked annotations
+#endif
+
+// For now (vsphere-2015), we don't implement Panic, Warning, or Debug in the
+// GDI case.
+#if KRNL_STUBS_DRIVER_TYPE != KRNL_STUBS_DRIVER_TYPE_GDI
+
/*
* Stub functions we provide.
*/
+#ifdef _WIN32
+NORETURN
+#endif
+void Panic(
+ _In_z_ _Printf_format_string_ const char *fmt,
+ ...) PRINTF_DECL(1, 2);
-void Panic(const char *fmt, ...);
-
-char *Str_Strcpy(char *buf, const char *src, size_t maxSize);
-int Str_Vsnprintf(char *str, size_t size, const char *format,
- va_list arguments);
-char *Str_Vasprintf(size_t *length, const char *format,
- va_list arguments);
-char *Str_Asprintf(size_t *length, const char *Format, ...);
+void Warning(
+ _In_z_ _Printf_format_string_ const char *fmt,
+ ...) PRINTF_DECL(1, 2);
/*
* Functions the driver must implement for the stubs.
*/
-EXTERN void Debug(const char *fmt, ...);
+EXTERN void Debug(
+ _In_z_ _Printf_format_string_ const char *fmt,
+ ...) PRINTF_DECL(1, 2);
+#endif // KRNL_STUBS_DRIVER_TYPE != KRNL_STUBS_DRIVER_TYPE_GDI
+
+#ifdef _WIN32
+#pragma warning(pop)
+#endif
#endif /* __KERNELSTUBS_H__ */