125 lines
3.6 KiB
C++
125 lines
3.6 KiB
C++
|
// --------------------------------------------------------------------------
|
||
|
// Module Name: BadApplicationDispatcher.cpp
|
||
|
//
|
||
|
// Copyright (c) 2000, Microsoft Corporation
|
||
|
//
|
||
|
// This file contains a class to implement bad application manager API
|
||
|
// request dispatch handling.
|
||
|
//
|
||
|
// History: 2000-08-25 vtan created
|
||
|
// 2000-12-04 vtan moved to separate file
|
||
|
// --------------------------------------------------------------------------
|
||
|
|
||
|
#ifdef _X86_
|
||
|
|
||
|
#include "StandardHeader.h"
|
||
|
#include "BadApplicationDispatcher.h"
|
||
|
|
||
|
#include "BadApplicationAPIRequest.h"
|
||
|
|
||
|
// --------------------------------------------------------------------------
|
||
|
// CBadApplicationDispatcher::CBadApplicationDispatcher
|
||
|
//
|
||
|
// Arguments: hClientProcess = HANDLE to the client process.
|
||
|
//
|
||
|
// Returns: <none>
|
||
|
//
|
||
|
// Purpose: Constructor for the CBadApplicationDispatcher class. This
|
||
|
// stores the client handle. It does not duplicate it.
|
||
|
//
|
||
|
// History: 2000-08-25 vtan created
|
||
|
// --------------------------------------------------------------------------
|
||
|
|
||
|
CBadApplicationDispatcher::CBadApplicationDispatcher (HANDLE hClientProcess) :
|
||
|
CAPIDispatcher(hClientProcess)
|
||
|
|
||
|
{
|
||
|
}
|
||
|
|
||
|
// --------------------------------------------------------------------------
|
||
|
// CBadApplicationDispatcher::~CBadApplicationDispatcher
|
||
|
//
|
||
|
// Arguments: <none>
|
||
|
//
|
||
|
// Returns: <none>
|
||
|
//
|
||
|
// Purpose: Destructor for the CBadApplicationDispatcher class.
|
||
|
//
|
||
|
// History: 2000-08-25 vtan created
|
||
|
// --------------------------------------------------------------------------
|
||
|
|
||
|
CBadApplicationDispatcher::~CBadApplicationDispatcher (void)
|
||
|
|
||
|
{
|
||
|
}
|
||
|
|
||
|
// --------------------------------------------------------------------------
|
||
|
// CBadApplicationDispatcher::CreateAndQueueRequest
|
||
|
//
|
||
|
// Arguments: portMessage = PORT_MESSAGE request to queue to handler.
|
||
|
//
|
||
|
// Returns: NTSTATUS
|
||
|
//
|
||
|
// Purpose: Queues the client request to the dispatcher. Tells the
|
||
|
// handler thread that there is input waiting. This function
|
||
|
// knows what kind of CAPIRequest to create so that
|
||
|
// CAPIRequest::Execute will work correctly.
|
||
|
//
|
||
|
// History: 2000-08-25 vtan created
|
||
|
// --------------------------------------------------------------------------
|
||
|
|
||
|
NTSTATUS CBadApplicationDispatcher::CreateAndQueueRequest(const CPortMessage& portMessage)
|
||
|
|
||
|
{
|
||
|
NTSTATUS status;
|
||
|
CQueueElement *pQueueElement;
|
||
|
|
||
|
pQueueElement = new CBadApplicationAPIRequest(this, portMessage);
|
||
|
if (pQueueElement != NULL)
|
||
|
{
|
||
|
_queue.Add(pQueueElement);
|
||
|
status = SignalRequestPending();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
status = STATUS_NO_MEMORY;
|
||
|
}
|
||
|
return(status);
|
||
|
}
|
||
|
|
||
|
// --------------------------------------------------------------------------
|
||
|
// CBadApplicationDispatcher::CreateAndExecuteRequest
|
||
|
//
|
||
|
// Arguments: <none>
|
||
|
//
|
||
|
// Returns: NTSTATUS
|
||
|
//
|
||
|
// Purpose: Executes the given request immediately and returns the result
|
||
|
// back to the caller. The API request is done on the server
|
||
|
// listen thread.
|
||
|
//
|
||
|
// History: 2000-10-19 vtan created
|
||
|
// --------------------------------------------------------------------------
|
||
|
|
||
|
NTSTATUS CBadApplicationDispatcher::CreateAndExecuteRequest (const CPortMessage& portMessage)
|
||
|
|
||
|
{
|
||
|
NTSTATUS status;
|
||
|
CAPIRequest *pAPIRequest;
|
||
|
|
||
|
pAPIRequest = new CBadApplicationAPIRequest(this, portMessage);
|
||
|
if (pAPIRequest != NULL)
|
||
|
{
|
||
|
status = Execute(pAPIRequest);
|
||
|
delete pAPIRequest;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
status = STATUS_NO_MEMORY;
|
||
|
}
|
||
|
return(status);
|
||
|
}
|
||
|
|
||
|
#endif /* _X86_ */
|
||
|
|