69 lines
1.2 KiB
C
69 lines
1.2 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (C) Microsoft Corporation, 2000
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
lock.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This file contains code iSCSI Port driver
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
kernel mode only
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "port.h"
|
|||
|
|
|||
|
|
|||
|
ULONG
|
|||
|
iSpAcquireRemoveLock(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN OPTIONAL PVOID Tag
|
|||
|
)
|
|||
|
{
|
|||
|
PCOMMON_EXTENSION commonExtension = DeviceObject->DeviceExtension;
|
|||
|
LONG lockValue;
|
|||
|
|
|||
|
lockValue = InterlockedIncrement(&(commonExtension->RemoveLock));
|
|||
|
|
|||
|
ASSERTMSG("iSpAcquireRemoveLock : lock value was negative ",
|
|||
|
(lockValue > 0));
|
|||
|
|
|||
|
return (commonExtension->IsRemoved);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
iSpReleaseRemoveLock(
|
|||
|
IN PDEVICE_OBJECT DeviceObject,
|
|||
|
IN OPTIONAL PVOID Tag
|
|||
|
)
|
|||
|
{
|
|||
|
PCOMMON_EXTENSION commonExtension = DeviceObject->DeviceExtension;
|
|||
|
LONG lockValue;
|
|||
|
|
|||
|
lockValue = InterlockedDecrement(&(commonExtension->RemoveLock));
|
|||
|
|
|||
|
if (lockValue < 0) {
|
|||
|
ASSERTMSG("iSpReleaseRemoveLock : lock value was negative ",
|
|||
|
(lockValue >= 0));
|
|||
|
}
|
|||
|
|
|||
|
if (lockValue == 0) {
|
|||
|
DebugPrint((3, "Releaselock for device object %x\n",
|
|||
|
DeviceObject));
|
|||
|
KeSetEvent(&(commonExtension->RemoveEvent),
|
|||
|
IO_NO_INCREMENT,
|
|||
|
FALSE);
|
|||
|
}
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|