IopSymlinkAllocateAndAddECP
NTSTATUS __stdcall IopSymlinkAllocateAndAddECP(PIRP Irp, _RELATIVE_SYMLINK_INFO **SymlinkInfo, UINT16 AllocationSize){
int v4;
char v6;
int ParameterFromLookasideList;
_ECP_LIST *v8;
_ECP_LIST *v9;
PECP_LIST EcpList;
*SymlinkInfo = 0i64;
EcpList = 0i64;
v4 = AllocationSize;
v6 = 0;
IoGetIrpExtraCreateParameter(Irp, &EcpList);
ParameterFromLookasideList = FsRtlAllocateExtraCreateParameterFromLookasideList(
(_LPCGUID)&IopSymlinkECPGuid,
v4 + 32,
0,
(PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK)IopSymlinkCleanupECP,
(char *)&WheapErrorSourceTable + 2856,
(PVOID *)SymlinkInfo);
if( ParameterFromLookasideList >= 0 )
{
v8 = EcpList;
if( EcpList )
goto LABEL_5;
ParameterFromLookasideList = FsRtlAllocateExtraCreateParameterList(0i64, &EcpList);
if( ParameterFromLookasideList >= 0 )
{
v8 = EcpList;
IoSetIrpExtraCreateParameter(Irp, (_IRP *)EcpList, v9);
v6 = 1;
LABEL_5:
ParameterFromLookasideList = FsRtlInsertExtraCreateParameter(v8, *SymlinkInfo);
if( ParameterFromLookasideList >= 0 )
return ParameterFromLookasideList;
goto LABEL_8;
}
}
v8 = EcpList;
LABEL_8:
if( *SymlinkInfo )
{
(*SymlinkInfo)->InteriorMountPoint = 0i64;
FsRtlFreeExtraCreateParameter(*SymlinkInfo);
*SymlinkInfo = 0i64;
}
if( v6 )
{
FsRtlFreeExtraCreateParameterList(v8);
IoClearIrpExtraCreateParameter((INT64)Irp);
}
return ParameterFromLookasideList;
}Referenced by:
IopGraftName
IopSymlinkCreateECP
IopSymlinkUpdateECP