IopSymlinkAllocateAndAddECP
INT64 __fastcall IopSymlinkAllocateAndAddECP(IRP *Irp, VOID **EcpContext, UINT16 a3){
int v4;
char v6;
NTSTATUS ParameterFromLookasideList;
PECP_LIST v8;
PECP_LIST EcpList;
*EcpContext = 0i64;
EcpList = 0i64;
v4 = a3;
v6 = 0;
IoGetIrpExtraCreateParameter(Irp, &EcpList);
ParameterFromLookasideList = FsRtlAllocateExtraCreateParameterFromLookasideList(
&IopSymlinkECPGuid,
v4 + 32,
0,
(PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK)IopSymlinkCleanupECP,
IopSymlinkInfoLookasideList,
EcpContext);
if( ParameterFromLookasideList >= 0 )
{
v8 = EcpList;
if( EcpList )
goto LABEL_5;
ParameterFromLookasideList = FsRtlAllocateExtraCreateParameterList(0i64, &EcpList);
if( ParameterFromLookasideList >= 0 )
{
v8 = EcpList;
IoSetIrpExtraCreateParameter(Irp, EcpList);
v6 = 1;
LABEL_5:
ParameterFromLookasideList = FsRtlInsertExtraCreateParameter(v8, *EcpContext);
if( ParameterFromLookasideList >= 0 )
return(unsigned int)ParameterFromLookasideList;
goto LABEL_8;
}
}
v8 = EcpList;
LABEL_8:
if( *EcpContext )
{
*((_QWORD *)*EcpContext + 1) = 0i64;
FsRtlFreeExtraCreateParameter(*EcpContext);
*EcpContext = 0i64;
}
if( v6 )
{
FsRtlFreeExtraCreateParameterList(v8);
IoClearIrpExtraCreateParameter(Irp);
}
return(unsigned int)ParameterFromLookasideList;
}Referenced by:
IopGraftName
IopSymlinkCreateECP
IopSymlinkUpdateECP