Я новичок в программировании 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