FsRtlRemoveExtraCreateParameter
NTSTATUS __stdcall FsRtlRemoveExtraCreateParameter(
_ECP_LIST *EcpList,
_GUID *EcpType,
VOID **EcpContext,
UINT64 *EcpContextSize){
_LIST_ENTRY *Flink;
NTSTATUS v6;
char *v7;
NTSTATUS result;
_LIST_ENTRY *v9;
_LIST_ENTRY *Blink;
int Blink_high;
*EcpContext = 0i64;
Flink = EcpList->EcpList.Flink;
v6 = -1073741275;
if( Flink == &EcpList->EcpList )
return v6;
while( 1 )
{
v7 = (char *)Flink[1].Flink - *(_QWORD *)&EcpType->Data1;
if( !v7 )
v7 = (char *)Flink[1].Blink - *(_QWORD *)EcpType->Data4;
if( !v7 )
break;
Flink = Flink->Flink;
if( Flink == &EcpList->EcpList )
return v6;
}
LODWORD(Flink[2].Blink) |= 4u;
v6 = 0;
v9 = Flink->Flink;
if( Flink->Flink->Blink != Flink || (Blink = Flink->Blink, Blink->Flink != Flink) )
__fastfail(3u);
Blink->Flink = v9;
v9->Blink = Blink;
Flink->Blink = 0i64;
Flink->Flink = 0i64;
*EcpContext = &Flink[4];
if( !EcpContextSize )
return v6;
Blink_high = HIDWORD(Flink[2].Blink);
result = 0;
*(_DWORD *)EcpContextSize = Blink_high - 72;
return result;
}Referenced by:
FsRtlCheckOplockEx2
FsRtlpAttachOplockKey
IopSymlinkRemoveECP