diff options
Diffstat (limited to 'open-vm-tools/modules/shared/vmmemctl/kernelStubs.h')
-rw-r--r-- | open-vm-tools/modules/shared/vmmemctl/kernelStubs.h | 176 |
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__ */ |