Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

127 lines
3.5 KiB

/****************************** 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)
/***************************************************************************\
* FixupCallbackPointers
*
* 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"