mirror of https://github.com/lianthony/NT4.0
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.
131 lines
2.6 KiB
131 lines
2.6 KiB
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ChngLock.c
|
|
|
|
Abstract:
|
|
|
|
This file contains:
|
|
|
|
ReplIncrLockFields
|
|
ReplDecrLockFields
|
|
|
|
Author:
|
|
|
|
John Rogers (JohnRo) 07-Jan-1992
|
|
|
|
Environment:
|
|
|
|
Runs under Windows NT.
|
|
Requires ANSI C extensions: slash-slash comments, long external names.
|
|
|
|
Revision History:
|
|
|
|
07-Jan-1992 JohnRo
|
|
Created.
|
|
18-Feb-1992 JohnRo
|
|
Extracted these bits of code from server for use by DLL stubs too.
|
|
22-Feb-1992 JohnRo
|
|
Made changes suggested by PC-LINT.
|
|
26-Feb-1992 JohnRo
|
|
Check lock fields for validity.
|
|
|
|
--*/
|
|
|
|
|
|
// These must be included first:
|
|
|
|
#include <windef.h> // IN, VOID, LPTSTR, etc.
|
|
#include <lmcons.h> // NET_API_STATUS.
|
|
|
|
// These can be in any order:
|
|
|
|
#include <lmrepl.h> // REPL_UNLOCK_ equates.
|
|
#include <netdebug.h> // NetpAssert(), etc.
|
|
#include <repldefs.h> // My prototypes, etc.
|
|
#include <replp.h> // NetpReplTimeNow().
|
|
#include <winerror.h> // ERROR_ and NO_ERROR equates.
|
|
|
|
|
|
NET_API_STATUS
|
|
ReplIncrLockFields (
|
|
IN OUT LPDWORD LockCountPtr,
|
|
IN OUT LPDWORD LockTimePtr
|
|
)
|
|
|
|
{
|
|
NetpAssert( LockCountPtr != NULL );
|
|
NetpAssert( LockTimePtr != NULL );
|
|
|
|
NetpAssert( ReplAreLockFieldsValid( *LockCountPtr, *LockTimePtr ) );
|
|
|
|
if ( *LockCountPtr == 0) {
|
|
|
|
*LockCountPtr = 1;
|
|
*LockTimePtr = NetpReplTimeNow();
|
|
|
|
} else {
|
|
|
|
// Not first time.
|
|
++ (*LockCountPtr);
|
|
|
|
NetpAssert( (*LockCountPtr) > 0 );
|
|
NetpAssert( (*LockTimePtr) > 0 );
|
|
|
|
}
|
|
|
|
NetpAssert( ReplAreLockFieldsValid( *LockCountPtr, *LockTimePtr ) );
|
|
|
|
return (NO_ERROR);
|
|
|
|
} // ReplIncrLockFields
|
|
|
|
|
|
NET_API_STATUS
|
|
ReplDecrLockFields (
|
|
IN OUT LPDWORD LockCountPtr,
|
|
IN OUT LPDWORD LockTimePtr,
|
|
IN DWORD UnlockForce
|
|
)
|
|
|
|
{
|
|
NET_API_STATUS ApiStatus;
|
|
|
|
NetpAssert( LockCountPtr != NULL );
|
|
NetpAssert( LockTimePtr != NULL );
|
|
|
|
NetpAssert( ReplAreLockFieldsValid( *LockCountPtr, *LockTimePtr ) );
|
|
|
|
if ( !ReplIsForceLevelValid( UnlockForce ) ) {
|
|
return (ERROR_INVALID_PARAMETER);
|
|
}
|
|
|
|
if ((*LockCountPtr) == 0) { // not locked now.
|
|
|
|
ApiStatus = ERROR_INVALID_PARAMETER;
|
|
|
|
} else {
|
|
|
|
if (UnlockForce == REPL_UNLOCK_NOFORCE) {
|
|
--(*LockCountPtr);
|
|
} else {
|
|
(*LockCountPtr) = 0;
|
|
}
|
|
|
|
if ((*LockCountPtr) == 0) { // not locked any more.
|
|
|
|
*LockTimePtr = 0;
|
|
|
|
}
|
|
|
|
ApiStatus = NO_ERROR;
|
|
}
|
|
|
|
NetpAssert( ReplAreLockFieldsValid( *LockCountPtr, *LockTimePtr ) );
|
|
|
|
return (ApiStatus);
|
|
|
|
} // ReplDecrLockFields
|