NT4/private/newsam2/server/rundown.c
2020-09-30 17:12:29 +02:00

151 lines
3.6 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
rundown.c
Abstract:
This file contains context handle rundown services
related to the SAM server RPC interface package..
Author:
Jim Kelly (JimK) 4-July-1991
Environment:
User Mode - Win32
Revision History:
--*/
///////////////////////////////////////////////////////////////////////////////
// //
// Includes //
// //
///////////////////////////////////////////////////////////////////////////////
#include <samsrvp.h>
///////////////////////////////////////////////////////////////////////////////
// //
// private service prototypes //
// //
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// //
// Routines //
// //
///////////////////////////////////////////////////////////////////////////////
void
SAMPR_HANDLE_rundown(
IN SAMPR_HANDLE SamHandle
)
/*++
Routine Description:
This service is called if a binding breaks when a context_handle is
still active.
Note that the RPC runtime will eliminate any race condition caused
by an outstanding call to the server with this context handle that
might cause the handle to become invalid before the rundown routine
is called.
Arguments:
SamHandle - The context handle value whose context must be rundown.
Note that as far as RPC is concerned, this handle is no longer
valid at the time the rundown call is made.
Return Value:
None.
--*/
{
NTSTATUS NtStatus;
PSAMP_OBJECT Context;
SAMP_OBJECT_TYPE FoundType;
Context = (PSAMP_OBJECT)(SamHandle);
SampAcquireReadLock();
//
// Lookup the context block
//
NtStatus = SampLookupContext(
Context, // Context
0L, // DesiredAccess
SampUnknownObjectType, // ExpectedType
&FoundType // FoundType
);
if (NT_SUCCESS(NtStatus)) {
// TEMPORARY
//DbgPrint("Rundown of ");
//if (FoundType == SampServerObjectType) DbgPrint("Server ");
//if (FoundType == SampDomainObjectType) DbgPrint("Domain ");
//if (FoundType == SampGroupObjectType) DbgPrint("Group ");
//if (FoundType == SampUserObjectType) DbgPrint("User ");
//DbgPrint("context.\n");
//DbgPrint(" Handle Value is: 0x%lx\n", Context );
//if (Context->ReferenceCount != 2) {
//DbgPrint(" REFERENCE COUNT is: 0x%lx\n", Context->ReferenceCount);
//}
// TEMPORARY
//
// Delete this context...
//
SampDeleteContext( Context );
//
// And drop our reference from the lookup operation
//
SampDeReferenceContext( Context, FALSE);
}
SampReleaseReadLock();
return;
}