IopSymlinkCreateECP
NTSTATUS __stdcall IopSymlinkCreateECP(
_IRP *Irp,
_FILE_OBJECT *CurrentFileObject,
_UNICODE_STRING *FileName,
UINT16 DeviceNameLength,
_RELATIVE_SYMLINK_INFO **Extension){
unsigned int Length;
char v9;
unsigned __int16 v10;
_FILE_OBJECT *RelatedFileObject;
_RELATIVE_SYMLINK_INFO **v12;
unsigned __int16 v13;
NTSTATUS result;
_RELATIVE_SYMLINK_INFO *v15;
WCHAR **FileObjectExtension;
WCHAR **v17;
int v18;
unsigned int v19;
UINT64 v20;
UINT16 DeviceNameLengtha;
_RELATIVE_SYMLINK_INFO *SymlinkInfo;
Length = FileName->Length;
SymlinkInfo = 0i64;
v9 = 0;
v10 = Length;
if( Length > 2 && FileName->Buffer[((unsigned __int64)Length >> 1) - 1] == 92 )
{
v10 = Length - 2;
v9 = 1;
FileName->Length = Length - 2;
}
RelatedFileObject = CurrentFileObject->RelatedFileObject;
v12 = Extension;
if( !RelatedFileObject )
{
v13 = v10;
LABEL_6:
result = IopSymlinkAllocateAndAddECP(Irp, &SymlinkInfo, v13);
if( result < 0 )
goto LABEL_9;
DeviceNameLengtha = DeviceNameLength;
v15 = SymlinkInfo;
IopSymlinkInitializeSymlinkInfo(
SymlinkInfo,
(unsigned int)FileName->Length + 32,
FileName->Buffer,
FileName->Length,
0,
0i64,
0,
DeviceNameLengtha,
0,
0i64);
goto LABEL_8;
}
FileObjectExtension = (WCHAR **)IopGetFileObjectExtension(RelatedFileObject, FoExtTypeSymlink, 0i64);
v17 = FileObjectExtension;
if( !FileObjectExtension )
{
v13 = FileName->Length;
goto LABEL_6;
}
v18 = FileName->Length + 2;
v19 = v18 + *((unsigned __int16 *)FileObjectExtension + 8);
if( v19 < 0xFFFF )
{
result = IopSymlinkAllocateAndAddECP(Irp, &SymlinkInfo, v18 + *((_WORD *)FileObjectExtension + 8));
if( result >= 0 )
{
v20 = v19 + 32;
v15 = SymlinkInfo;
IopSymlinkInitializeSymlinkInfo(
SymlinkInfo,
v20,
FileName->Buffer,
FileName->Length,
0,
v17[3],
*((_WORD *)v17 + 8),
*((_WORD *)v17 + 2),
*((_WORD *)v17 + 1),
0i64);
v15->ExposedNamespaceLength = *(_WORD *)v17 + v15->OpenedName.Length - *((_WORD *)v17 + 8);
LABEL_8:
*v12 = v15;
result = 0;
}
}
else
{
result = -1073741562;
}
LABEL_9:
if( v9 )
FileName->Length += 2;
if( result < 0 )
*v12 = 0i64;
return result;
}Referenced by:
IopParseDevice