125 lines
2 KiB
C
125 lines
2 KiB
C
|
/*++
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
|
|||
|
|