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.
|
|
/*++
Copyright (c) 1999 Microsoft Corporation
Module Name : w3handler.cxx
Abstract: Common functionality of all handlers Author: Bilal Alam (balam) Sept-29-2000
Environment: Win32 - User Mode
Project: ULW3.DLL --*/
#include "precomp.hxx"
CONTEXT_STATUS W3_HANDLER::MainDoWork( VOID ) /*++
Routine Description:
Checks access and then calls handler routine
Return Value:
CONTEXT_STATUS_PENDING if async pending, else CONTEXT_STATUS_CONTINUE
--*/ { CONTEXT_STATUS contextStatus; BOOL fAccessAllowed = FALSE;
W3_CONTEXT *pW3Context = QueryW3Context(); DBG_ASSERT( pW3Context != NULL );
//
// Check access
//
contextStatus = pW3Context->CheckAccess( FALSE, // not a completion
0, // cbCompletion
NO_ERROR, &fAccessAllowed );
if ( contextStatus == CONTEXT_STATUS_PENDING ) { return CONTEXT_STATUS_PENDING; } //
// Access check must be complete if we're here
//
DBG_ASSERT( pW3Context->QueryAccessChecked() );
if ( !fAccessAllowed ) { //
// CheckAccess already sent error
//
return CONTEXT_STATUS_CONTINUE; } //
// Now we can execute the handler
//
return DoWork(); }
CONTEXT_STATUS W3_HANDLER::MainOnCompletion( DWORD cbCompletion, DWORD dwCompletionStatus ) /*++
Routine Description:
Continue access check if needed, then then when finished, call into the handler start If handler is already started, funnel the completion to the handler
Arguments:
cbCompletion - Bytes of completion dwCompletionStatus - Status of completion
Return Value:
CONTEXT_STATUS_PENDING if async pending, else CONTEXT_STATUS_CONTINUE
--*/ { W3_CONTEXT * pW3Context; CONTEXT_STATUS contextStatus; BOOL fAccessAllowed = FALSE; pW3Context = QueryW3Context(); DBG_ASSERT( pW3Context != NULL ); if ( !pW3Context->QueryAccessChecked() ) { //
// If access hasn't been checked completely yet, then we should resume
// it
//
contextStatus = pW3Context->CheckAccess( TRUE, // completion
cbCompletion, dwCompletionStatus, &fAccessAllowed ); if ( contextStatus == CONTEXT_STATUS_PENDING ) { return CONTEXT_STATUS_PENDING; } DBG_ASSERT( pW3Context->QueryAccessChecked() ); if ( !fAccessAllowed ) { //
// CheckAccess already sent error
//
return CONTEXT_STATUS_CONTINUE; } //
// Now we can execute the original handler
//
return DoWork(); } else { //
// Access checks have already been made. This must be a completion
// for the handler itself
//
return OnCompletion( cbCompletion, dwCompletionStatus ); } }
|