• XSS.stack #1 – первый литературный журнал от юзеров форума

C++ create hard link NT

premiumcat

ripper
КИДАЛА
Регистрация
19.10.2020
Сообщения
195
Реакции
47
Пожалуйста, обратите внимание, что пользователь заблокирован
C:
int create_link( LPCWSTR lpExistingFileName, LPCWSTR lpLinkName )
{
    NTSTATUS status;
    
    UNICODE_STRING OldFileName;
    UNICODE_STRING NewFileName;
    
    OBJECT_ATTRIBUTES OldObject;
    OBJECT_ATTRIBUTES NewObject;
    
    IO_STATUS_BLOCK OldIoStatusBlock;
    PFILE_LINK_INFORMATION NewName;

    HANDLE OldFileHandle, NewFileHandle = INVALID_HANDLE_VALUE;

    OldFileName.Buffer = NULL;
    NewFileName.Buffer = NULL;

    NTLIB32.RtlInitUnicodeString( &OldFileName, lpExistingFileName );

    InitializeObjectAttributes(
        &OldObject,
        &OldFileName,
        OBJ_CASE_INSENSITIVE,
        NULL,
        NULL
    );

    status = NTLIB32.NtOpenFile(
        &OldFileHandle,
        FILE_WRITE_ATTRIBUTES | SYNCHRONIZE,
        &OldObject,
        &OldIoStatusBlock,
        FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
        FILE_FLAG_OPEN_REPARSE_POINT | FILE_SYNCHRONOUS_IO_NONALERT
    );

    NTLIB32.RtlInitUnicodeString( &NewFileName, lpLinkName );
    InitializeObjectAttributes(
        &NewObject,
        &NewFileName,
        OBJ_CASE_INSENSITIVE,
        NULL,
        NULL
    );
    
    NewName = ( PFILE_LINK_INFORMATION ) malloc ( NewFileName.Length + sizeof( *NewName ) );
    memmove( NewName->FileName, NewFileName.Buffer, NewFileName.Length );
    NewName->ReplaceIfExists = FALSE;
    NewName->RootDirectory = NULL;
    NewName->FileNameLength = NewFileName.Length;
    
    status = NTLIB32.NtSetInformationFile(
        OldFileHandle,
        &OldIoStatusBlock,
        NewName,
        NewFileName.Length + sizeof( *NewName ),
        11
    );

    switch ( status )
    {
        case 00000000:
        {
            if ( OldFileHandle != INVALID_HANDLE_VALUE )
            {
                if ( NTLIB32.NtClose( OldFileHandle ) == 00000000 )
                {
                    return 0;
                }
            }
        }
    }

    return -1;
}
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх