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) Microsoft Corporation. All rights reserved.
Module Name:
locks.c
Abstract:
This module contains locking routines used by both cfgmgr32 and umpnpmgr.
InitPrivateResource DestroyPrivateResource
Author:
Jim Cavalaris (jamesca) 03-15-2001
Environment:
User mode only.
Revision History:
15-March-2001 jamesca
Creation and initial implementation.
--*/
//
// includes
//
#include "precomp.h"
#pragma hdrstop
#include "umpnplib.h"
//
// Common locking routines, used by client and server.
// (LOCKINFO type definition and inline lock / unlock routines defined in
// umpnplib.h)
//
BOOL InitPrivateResource( OUT PLOCKINFO Lock )
/*++
Routine Description:
Initialize a lock structure to be used with Synchronization routines.
Arguments:
LockHandles - supplies structure to be initialized. This routine creates the locking event and mutex and places handles in this structure.
Return Value:
TRUE if the lock structure was successfully initialized. FALSE if not.
--*/
{
Lock->LockHandles[DESTROYED_EVENT] = CreateEvent(NULL, TRUE, FALSE, NULL);
if (Lock->LockHandles[DESTROYED_EVENT] != NULL) {
Lock->LockHandles[ACCESS_MUTEX] = CreateMutex(NULL, FALSE, NULL);
if (Lock->LockHandles[ACCESS_MUTEX] != NULL) { return TRUE; }
CloseHandle(Lock->LockHandles[DESTROYED_EVENT]);
Lock->LockHandles[DESTROYED_EVENT] = NULL; }
return FALSE;
} // InitPrivateResource
VOID DestroyPrivateResource( IN OUT PLOCKINFO Lock )
/*++
Routine Description:
Tears down a lock structure created by InitPrivateResource. ASSUMES THAT THE CALLING ROUTINE HAS ALREADY ACQUIRED THE LOCK!
Arguments:
LockHandle - supplies structure to be torn down. The structure itself is not freed.
Return Value:
None.
--*/
{ HANDLE h1,h2;
h1 = Lock->LockHandles[DESTROYED_EVENT]; h2 = Lock->LockHandles[ACCESS_MUTEX];
Lock->LockHandles[DESTROYED_EVENT] = NULL; Lock->LockHandles[ACCESS_MUTEX] = NULL;
CloseHandle(h2);
SetEvent(h1); CloseHandle(h1);
return;
} // DestroyPrivateResource
|