windows-nt/Source/XPSP1/NT/base/pnp/lib/locks.c
2020-09-26 16:20:57 +08:00

125 lines
2 KiB
C
Raw 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) 1995-2001 Microsoft Corporation
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"
#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.
--*/
{
if(Lock->LockHandles[DESTROYED_EVENT] = CreateEvent(NULL,TRUE,FALSE,NULL)) {
if(Lock->LockHandles[ACCESS_MUTEX] = CreateMutex(NULL,FALSE,NULL)) {
return(TRUE);
}
CloseHandle(Lock->LockHandles[DESTROYED_EVENT]);
}
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);
} // DestroyPrivateResource