ExInitializeResourceLite( &pNPFcb->PagingResource);
+ ExInitializeResourceLite( &pNPFcb->CcbListLock);
+
pFcb->Header.Resource = &pNPFcb->Resource;
pFcb->Header.PagingIoResource = &pNPFcb->PagingResource;
ExDeleteResourceLite( &pNPFcb->PagingResource);
+ ExDeleteResourceLite( &pNPFcb->CcbListLock);
+
ExDeleteResourceLite( &pNPFcb->Resource);
}
ExInitializeResourceLite( &pNPFcb->PagingResource);
+ ExInitializeResourceLite( &pNPFcb->CcbListLock);
+
pFcb->Header.Resource = &pNPFcb->Resource;
pFcb->Header.PagingIoResource = &pNPFcb->PagingResource;
ExDeleteResourceLite( &RootFcb->NPFcb->PagingResource);
+ ExDeleteResourceLite( &RootFcb->NPFcb->CcbListLock);
+
//
// The non paged region
//
ExDeleteResourceLite( &Fcb->NPFcb->PagingResource);
-
+ ExDeleteResourceLite( &Fcb->NPFcb->CcbListLock);
//
// The non paged region
//
NTSTATUS
-AFSRemoveCcb( IN AFSCcb *Ccb)
+AFSRemoveCcb( IN AFSFcb *Fcb,
+ IN AFSCcb *Ccb)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
+ if( Fcb != NULL &&
+ BooleanFlagOn( Ccb->Flags, CCB_FLAG_INSERTED_CCB_LIST))
+ {
+
+ AFSAcquireExcl( &Fcb->NPFcb->CcbListLock,
+ TRUE);
+
+ if( Ccb->ListEntry.fLink == NULL)
+ {
+
+ Fcb->CcbListTail = (AFSCcb *)Ccb->ListEntry.bLink;
+
+ if( Fcb->CcbListTail != NULL)
+ {
+ Fcb->CcbListTail->ListEntry.fLink = NULL;
+ }
+ }
+ else
+ {
+ ((AFSCcb *)(Ccb->ListEntry.fLink))->ListEntry.bLink = Ccb->ListEntry.bLink;
+ }
+
+ if( Ccb->ListEntry.bLink == NULL)
+ {
+
+ Fcb->CcbListHead = (AFSCcb *)Ccb->ListEntry.fLink;
+
+ if( Fcb->CcbListHead != NULL)
+ {
+ Fcb->CcbListHead->ListEntry.bLink = NULL;
+ }
+ }
+ else
+ {
+ ((AFSCcb *)(Ccb->ListEntry.bLink))->ListEntry.fLink = Ccb->ListEntry.fLink;
+ }
+
+ AFSReleaseResource( &Fcb->NPFcb->CcbListLock);
+ }
+
if( Ccb->MaskName.Buffer != NULL)
{
return ntStatus;
}
+
+NTSTATUS
+AFSInsertCcb( IN AFSFcb *Fcb,
+ IN AFSCcb *Ccb)
+{
+
+ NTSTATUS ntStatus = STATUS_SUCCESS;
+
+ AFSAcquireExcl( &Fcb->NPFcb->CcbListLock,
+ TRUE);
+
+ if( Fcb->CcbListHead == NULL)
+ {
+ Fcb->CcbListHead = Ccb;
+ }
+ else
+ {
+ Fcb->CcbListTail->ListEntry.fLink = (void *)Ccb;
+
+ Ccb->ListEntry.bLink = (void *)Fcb->CcbListTail;
+ }
+
+ Fcb->CcbListTail = Ccb;
+
+ SetFlag( Ccb->Flags, CCB_FLAG_INSERTED_CCB_LIST);
+
+ AFSReleaseResource( &Fcb->NPFcb->CcbListLock);
+
+ return ntStatus;
+}