Windows2000/private/ntos/w32/ntuser/client/crecv.c
2020-09-30 17:12:32 +02:00

104 lines
2.9 KiB
C

/****************************** Module Header ******************************\
* Module Name: crecv.c
* Copyright (c) 1985 - 1999, Microsoft Corporation
* Client side receiving stubs
* 07-06-91 ScottLu Created.
*/
#include "precomp.h"
#pragma hdrstop
#include <dbt.h>
#define CALLBACKPROC 1
#define CLIENTSIDE 1
#include "callback.h"
/*
* Receive setup and control macros
*/
#define RECVSIDE 1
#define RECVCALL(lower, upper) DWORD __ ## lower (upper *pmsg)
#define BEGINRECV(err, p, cb) \
CALLBACKSTATUS CallbackStatus; \
NTSTATUS Status = STATUS_SUCCESS; \
ULONG_PTR retval = (ULONG_PTR)err; \
CallbackStatus.cbOutput = cb; \
CallbackStatus.pOutput = p;
#define FIXUPPOINTERS() \
if (pmsg->CaptureBuf.cCapturedPointers && pmsg->CaptureBuf.pvVirtualAddress == NULL) FixupCallbackPointers(&pmsg->CaptureBuf);
#if defined(_X86_) && !defined(BUILD_WOW6432)
NTSTATUS FASTCALL XyCallbackReturn(IN PVOID Buffer, IN ULONG Length, IN NTSTATUS Status);
#define ENDRECV() \
goto errorexit; \
errorexit: \
CallbackStatus.retval = retval; \
return XyCallbackReturn(&CallbackStatus, sizeof(CallbackStatus), Status)
#else
#define ENDRECV() \
goto errorexit; \
errorexit: \
CallbackStatus.retval = retval; \
return NtCallbackReturn(&CallbackStatus, sizeof(CallbackStatus), Status)
#endif
#define MSGERROR() goto errorexit
#define MSGERRORCODE(code) { \
RIPERR0(code, RIP_WARNING, "Unspecified error"); \
goto errorexit; }
#define MSGNTERRORCODE(code) { \
RIPNTERR0(code, RIP_WARNING, "Unspecified error"); \
goto errorexit; }
/*
* Callback parameter fixup macros
*/
//#undef CALLPROC
//#define CALLPROC(p) FNID(p)
#define CALLDATA(x) (pmsg->x)
#define PCALLDATA(x) (&(pmsg->x))
#define PCALLDATAOPT(x) (pmsg->p ## x ? (PVOID)&(pmsg->x) : NULL)
#define FIRSTFIXUP(x) (pmsg->x)
#define FIXUPOPT(x) (pmsg->x)
#define FIRSTFIXUPOPT(x) FIXUPOPT(x)
#define FIXUP(x) (pmsg->x)
#define FIXUPID(x) (pmsg->x)
#define FIXUPIDOPT(x) (pmsg->x)
#define FIXUPSTRING(x) (pmsg->x.Buffer)
#define FIXUPSTRINGID(x) (pmsg->x.Buffer)
#define FIXUPSTRINGIDOPT(x) (pmsg->x.Buffer)
/*
* Fixes up captured callback pointers.
* 03-13-95 JimA Created.
*/
VOID FixupCallbackPointers(PCAPTUREBUF pcb)
{
DWORD i;
LPDWORD lpdwOffset;
PVOID *ppFixup;
lpdwOffset = (LPDWORD)((PBYTE)pcb + pcb->offPointers);
for (i = 0; i < pcb->cCapturedPointers; ++i, ++lpdwOffset) {
ppFixup = (PVOID *)((PBYTE)pcb + *lpdwOffset);
*ppFixup = (PBYTE)pcb + (LONG_PTR)*ppFixup;
}
}
/*
* include the stub definition file
*/
#include "ntcb.h"