Leaked source code of windows server 2003
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.
 
 
 
 
 
 

95 lines
2.0 KiB

/*++
Copyright (c) 1997, 1998 Microsoft Corporation
Module Name:
siclose.c
Abstract:
Close routines for the single instance store
Authors:
Bill Bolosky, Summer, 1997
Environment:
Kernel mode
Revision History:
--*/
#include "sip.h"
NTSTATUS
SiClose(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
/*++
Routine Description:
This routine is invoked upon file close operations. If it's a SIS file,
remove our filter context and clean up after ourselves. In any case,
let the close go down to NTFS.
Arguments:
DeviceObject - Pointer to this driver's device object.
Irp - Pointer to the close irp
Return Value:
The status from the NTFS close
--*/
{
PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
PFILE_OBJECT fileObject = irpSp->FileObject;
PSIS_PER_FILE_OBJECT perFO;
PSIS_SCB scb;
PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension;
//
// The control device object can not be opened
//
ASSERT(!IS_MY_CONTROL_DEVICE_OBJECT( DeviceObject ));
ASSERT(IS_MY_DEVICE_OBJECT( DeviceObject ));
#if DBG
if (BJBDebug & 0x1) {
DbgPrint("SIS: SiClose: fileObject %p, %0.*ws\n",
fileObject,fileObject->FileName.Length / sizeof(WCHAR),fileObject->FileName.Buffer);
}
#endif // DBG
if (!SipIsFileObjectSIS(fileObject,DeviceObject,FindAny,&perFO,&scb)) {
SipDirectPassThroughAndReturn(DeviceObject, Irp);
}
SIS_MARK_POINT_ULONG(perFO);
//
// Get rid of the perFO for this file object. If this was the last file object,
// then the filter context will get removed by NTFS, and deallocated by the appropriate
// callback routine.
//
SipDeallocatePerFO(perFO,DeviceObject);
//
// We don't need to do any further processing on this SIS file object, so pass it
// through.
//
SipDirectPassThroughAndReturn(DeviceObject, Irp); // NB: This was a SIS file object!!!!
}