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.
 
 
 
 
 
 

136 lines
2.3 KiB

/*++
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