Установить критический процесс Ruby FFI - PullRequest
1 голос
/ 28 апреля 2020

Я новичок в программировании Windows API и играл с Ruby FFI gem. Мне было любопытно создать критический процесс, и вот код, который у меня есть. Проблема в том, что я получаю сообщение Нет , что означает, что процесс не был установлен как критический. Не могу понять, что здесь не так Спасибо заранее

require 'ffi'

module Win
    extend FFI::Library
    ffi_lib 'C:\Windows\System32\ntdll.dll'
    ffi_convention :stdcall

    attach_function :RtlSetProcessIsCritical, [:int, :int, :int], :void
end

module Kernel
    extend FFI::Library
    ffi_lib 'kernel32'
    ffi_convention :stdcall

    attach_function :GetCurrentProcess, [], :pointer
    attach_function :IsProcessCritical, [:pointer, :pointer], :int
end

begin 
    ptr = FFI::MemoryPointer.new :bool, 1
    Win.RtlSetProcessIsCritical(1, 0, 0)

    cprcs = Kernel.GetCurrentProcess()
    Win.IsProcessCritical(cprcs, ptr)

    if ptr.get(:bool, 0) then
        puts "Critical"
    else
        puts "Nope."
    end
rescue => e
    puts e
ensure
    Win.RtlSetProcessIsCritical(0, 0, 0)
end

1 Ответ

1 голос
/ 01 мая 2020

С «Защита» вашего процесса с помощью RtlSetProcessIsCritical:

Примечание. Для использования этой функции требуется привилегия SE_DEBUG_NAME в вызывающем процессе. Это можно легко получить с помощью AdjustTokenPrivileges

...