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) 1997 - 98, Microsoft Corporation
Module Name:
rtmhndl.c
Abstract:
Contains routines for operating on handles to RTM objects like routes and dests.
Author:
Chaitanya Kodeboyina (chaitk) 23-Aug-1998
Revision History:
--*/
#include "pchrtm.h"
#pragma hdrstop
DWORD WINAPI RtmReferenceHandles ( IN RTM_ENTITY_HANDLE RtmRegHandle, IN UINT NumHandles, IN HANDLE *RtmHandles )
/*++
Routine Description:
Increment the reference count on objects pointed to by input RTM handles.
Arguments:
RtmRegHandle - RTM registration handle for calling entity,
NumHandles - Number of handles that are being referenced,
RtmHandles - Array of handles that are being referenced.
Return Value:
Status of the operation
--*/
{ PENTITY_INFO Entity; POBJECT_HEADER Object; UINT i;
DBG_VALIDATE_ENTITY_HANDLE(RtmRegHandle, &Entity);
//
// Reference each handle in input array
//
for (i = 0; i < NumHandles; i++) { Object = GET_POINTER_FROM_HANDLE(RtmHandles[i]);
#if DBG_HDL
try { if (Object->TypeSign != OBJECT_SIGNATURE[atoi(&Object->Type)]) { continue; } } except(EXCEPTION_EXECUTE_HANDLER) { continue; } #endif
ReferenceObject(Object, HANDLE_REF); }
return NO_ERROR; }
DWORD WINAPI RtmDereferenceHandles ( IN RTM_ENTITY_HANDLE RtmRegHandle, IN UINT NumHandles, IN HANDLE *RtmHandles )
/*++
Routine Description:
Decrement the reference count on objects pointed to by input RTM handles.
Arguments:
RtmRegHandle - RTM registration handle for calling entity,
NumHandles - Number of handles that are being dereferenced,
RtmHandles - Array of handles that are being dereferenced.
Return Value:
Status of the operation
--*/
{ PENTITY_INFO Entity; POBJECT_HEADER Object; UINT i;
DBG_VALIDATE_ENTITY_HANDLE(RtmRegHandle, &Entity);
//
// Dereference each handle in input array
//
for (i = 0; i < NumHandles; i++) { Object = GET_POINTER_FROM_HANDLE(RtmHandles[i]);
#if DBG_HDL
try { if (Object->TypeSign != OBJECT_SIGNATURE[atoi(&Object->Type)]) { continue; } } except(EXCEPTION_EXECUTE_HANDLER) { continue; } #endif
//
// This function can be used only if you know
// that the reference count does not go to 0
//
if (DereferenceObject(Object, HANDLE_REF) == 0) { ASSERT(FALSE); // ? Destroy which object ?
} }
return NO_ERROR; }
|