116 lines
3.2 KiB
C
116 lines
3.2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1998-2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
thnkhlpr.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Header for thunk helper functions.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
19-Jul-1998 BarryBo
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
// Determines if a pointer points to a item or is a special value.
|
||
|
// If it is a special value it should be copied without dereferencing.
|
||
|
#define WOW64_ISPTR(a) ((void *)a != NULL)
|
||
|
|
||
|
//
|
||
|
// Helper thunk functions called by all the thunks to thunk common types.
|
||
|
//
|
||
|
|
||
|
NT32SIZE_T*
|
||
|
Wow64ShallowThunkSIZE_T64TO32(
|
||
|
OUT NT32SIZE_T *dst,
|
||
|
IN PSIZE_T src
|
||
|
);
|
||
|
|
||
|
PSIZE_T
|
||
|
Wow64ShallowThunkSIZE_T32TO64(
|
||
|
OUT PSIZE_T dst,
|
||
|
IN NT32SIZE_T *src
|
||
|
);
|
||
|
|
||
|
#define Wow64ThunkSIZE_T32TO64(src) \
|
||
|
(SIZE_T)(src)
|
||
|
|
||
|
#define Wow64ThunkSIZE_T64TO32(src) \
|
||
|
(NT32SIZE_T)min((src), 0xFFFFFFFF)
|
||
|
|
||
|
#define Wow64ShallowThunkUnicodeString32TO64(dst, src) \
|
||
|
((PUNICODE_STRING)(dst))->Length = ((NT32UNICODE_STRING *)(src))->Length; \
|
||
|
((PUNICODE_STRING)(dst))->MaximumLength = ((NT32UNICODE_STRING *)(src))->MaximumLength; \
|
||
|
((PUNICODE_STRING)(dst))->Buffer = (PWSTR)((NT32UNICODE_STRING *)(src))->Buffer;
|
||
|
|
||
|
#define Wow64ShallowThunkUnicodeString64TO32(dst, src) \
|
||
|
((NT32UNICODE_STRING *)(dst))->Length = ((PUNICODE_STRING)(src))->Length; \
|
||
|
((NT32UNICODE_STRING *)(dst))->MaximumLength = ((PUNICODE_STRING)(src))->MaximumLength; \
|
||
|
((NT32UNICODE_STRING *)(dst))->Buffer = (NT32PWSTR)((PUNICODE_STRING)(src))->Buffer;
|
||
|
|
||
|
#define Wow64ShallowThunkAllocUnicodeString32TO64(src) \
|
||
|
Wow64ShallowThunkAllocUnicodeString32TO64_FNC((NT32UNICODE_STRING *)(src))
|
||
|
|
||
|
PUNICODE_STRING
|
||
|
Wow64ShallowThunkAllocUnicodeString32TO64_FNC(
|
||
|
IN NT32UNICODE_STRING *src
|
||
|
);
|
||
|
|
||
|
#define Wow64ShallowThunkAllocSecurityDescriptor32TO64(src) \
|
||
|
Wow64ShallowThunkAllocSecurityDescriptor32TO64_FNC((NT32SECURITY_DESCRIPTOR *)(src))
|
||
|
|
||
|
PSECURITY_DESCRIPTOR
|
||
|
Wow64ShallowThunkAllocSecurityDescriptor32TO64_FNC(
|
||
|
IN NT32SECURITY_DESCRIPTOR *src
|
||
|
);
|
||
|
|
||
|
#define Wow64ShallowThunkAllocSecurityTokenProxyData32TO64(src) \
|
||
|
Wow64ShallowThunkAllocSecurityTokenProxyData32TO64_FNC((NT32SECURITY_TOKEN_PROXY_DATA *)(src))
|
||
|
|
||
|
PSECURITY_TOKEN_PROXY_DATA
|
||
|
Wow64ShallowThunkAllocSecurityTokenProxyData32TO64_FNC(
|
||
|
IN NT32SECURITY_TOKEN_PROXY_DATA *src
|
||
|
);
|
||
|
|
||
|
#define Wow64ShallowThunkAllocSecurityQualityOfService32TO64(src) \
|
||
|
Wow64ShallowThunkAllocSecurityQualityOfService32TO64_FNC((NT32SECURITY_QUALITY_OF_SERVICE *)(src))
|
||
|
|
||
|
PSECURITY_QUALITY_OF_SERVICE
|
||
|
Wow64ShallowThunkAllocSecurityQualityOfService32TO64_FNC(
|
||
|
IN NT32SECURITY_QUALITY_OF_SERVICE *src
|
||
|
);
|
||
|
|
||
|
#define Wow64ShallowThunkAllocObjectAttributes32TO64(src) \
|
||
|
Wow64ShallowThunkAllocObjectAttributes32TO64_FNC((NT32OBJECT_ATTRIBUTES *)(src))
|
||
|
|
||
|
POBJECT_ATTRIBUTES
|
||
|
Wow64ShallowThunkAllocObjectAttributes32TO64_FNC(
|
||
|
IN NT32OBJECT_ATTRIBUTES *src
|
||
|
);
|
||
|
|
||
|
ULONG
|
||
|
Wow64ThunkAffinityMask64TO32(
|
||
|
IN ULONG_PTR Affinity64
|
||
|
);
|
||
|
|
||
|
ULONG_PTR
|
||
|
Wow64ThunkAffinityMask32TO64(
|
||
|
IN ULONG Affinity32
|
||
|
);
|
||
|
|
||
|
VOID WriteReturnLengthSilent(PULONG ReturnLength, ULONG Length);
|
||
|
VOID WriteReturnLengthStatus(PULONG ReturnLength, NTSTATUS *pStatus, ULONG Length);
|
||
|
|
||
|
VOID
|
||
|
Wow64RedirectFileName(
|
||
|
IN OUT WCHAR *Name,
|
||
|
IN OUT ULONG *Length
|
||
|
);
|
||
|
|