mirror of https://github.com/tongzx/nt5src
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.
124 lines
2.0 KiB
124 lines
2.0 KiB
/*++
|
|
|
|
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
|
|
|
|
|
|
|