рдПрдХ рдбреНрд░рд╛рдЗрд╡рд░ рдЖрд╕рд╛рди рд╣реИ

рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдмрдирд╛рдирд╛ рдХрд▓реНрдкрдирд╛ рдХреЗ рдХрдЧрд╛рд░ рдкрд░ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рдХреБрдЫ рдкрд░рд┐рд╖реНрдХреГрдд рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдпрд╛ рдЦреЗрд▓реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдпрд╣реА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдЪрд╛рд▓рдХ рдХреНрдпрд╛ рдмрдирд╛рдПрдВрдЧреЗред рдЪреВрдВрдХрд┐ рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрддреА рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЛ рд╕рд░рд▓ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рд╕реА рдпрд╛ рдХреЛрдбрд╛рдВрддрд░рдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╣реИред рд╣рдо рдореВрд▓ рдмреЛрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ - PureBasic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдЙрдиреНрд╣реЗрдВ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реЗрдЯ рд╣реИ рдФрд░ рдереЛрдбрд╝реА рд╢рд░реНрдорд┐рдВрджрдЧреА рдЖрдкрдХреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрдИ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдиреБрд╡рд╛рджрдХ рдХреЛрдб рдореЗрдВ рдореВрд▓ рдХреЛрдб рдХреЛ "рдбрд┐рд╕реНрдЯрд┐рд▓" рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ FASM (рдХреЛрдбрд╛рдВрддрд░рдХ рд╕рдВрдХрд▓рдХ) рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреЙрд▓рд┐рдВрдХ рд▓рд┐рдВрдХрд░, рдЬреЛ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЦреЗрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХреЛрдбрд╛рдВрддрд░рдХ рд╕рдВрдХрд▓рдХ рдФрд░ рд▓рд┐рдВрдХрд░ рджреЛрдиреЛрдВ рд╣реА рдбреНрд░рд╛рдЗрд╡рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╣рдо рд╕рдВрдХрд▓рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ EXE рдпрд╛ DLL, рд▓реЗрдХрд┐рди рдХрд░реНрдиреЗрд▓-рдореЛрдб рдбреНрд░рд╛рдЗрд╡рд░ (SYS)ред

рдЖрдк FilesBeld , рджрд░реНрдкрдг рдкрд░ PureBasic 4.61 x86 рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдореБрдлреНрдд рдбреЗрдореЛ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рдпрджрд┐ рдЖрдкрдХреЛ x64 рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ , рдПрдХ рджрд░реНрдкрдгред

рд╡рд┐рддрд░рдг рдЫреЛрдЯреЗ рд╣реИрдВ, рд▓рдЧрднрдЧ 3 рдПрдордмреА рдкреНрд░рддреНрдпреЗрдХред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рдЖрдк рдХреЗрд╡рд▓ рдбреНрд░рд╛рдЗрд╡рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
"PureBasic рдкреЛрд░реНрдЯреЗрдмрд▓" рдлрд╝рд╛рдЗрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб, рдЕрдирдкреИрдХ рдХрд░реЗрдВ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдИрдбреАрдИ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкреЙрдк рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдбреЗрдореЛ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдЗрд╕рдореЗрдВ рд╕реЗ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 800 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд╛рдзрд╛рд░рдг рдбреНрд░рд╛рдЗрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢реЗрд╖ рдкреНрд░рддрд┐рдмрдВрдз рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЖрдИрдбреАрдИ рд╡рд┐рдВрдбреЛ рдХреЛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЫрд╡рд┐

рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рд╕рдВрдХрд▓рди "рдХрдВрдкрд╛рдЗрд▓рд░" рдореЗрдиреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рд╣реИ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛)ред
рдЫрд╡рд┐

рдЕрдм рд╣рдо рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛ред рдЖрдорддреМрд░ рдкрд░, рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╕рд░рд▓ рдЪреАрдЬреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдХрд╣рддреЗ рд╣реИрдВ, рдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рд╣рдорд╛рд░реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд░реНрдиреЗрд▓ рдореЛрдб рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХреЗрд▓реЗрд▓ рдЧрдгрд┐рдд рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ!

рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛрдб:

Declare DriverEntry(*DriverObject, *RegistryPath) !public PureBasicStart !section '.code' code readable executable align 8 !PureBasicStart: *A=@DriverEntry() !jmp [p_A] ;    DriverEntry(). #IOCTL_MyPlus = $200 !extrn PB_PokeL CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !extrn _IoCompleteRequest@8 ;    . !extrn _RtlInitUnicodeString@8 !extrn _IoCreateDevice@28 !extrn _IoDeleteDevice@4 !extrn _IoCreateSymbolicLink@8 !extrn _IoDeleteSymbolicLink@4 !extrn _PB_PeekI@4 Import "ntoskrnl.lib" CompilerCase #PB_Processor_x64 !extrn IoCompleteRequest;    . !extrn RtlInitUnicodeString !extrn IoCreateDevice !extrn IoDeleteDevice !extrn IoCreateSymbolicLink !extrn IoDeleteSymbolicLink !extrn PB_PeekI ImportC "ntoskrnl.lib" CompilerEndSelect ;    . IoCompleteRequest(*IRP, PriorityBoost) RtlInitUnicodeString(*UString, *String) IoCreateDevice(*DriverObject, DeviceExtensionSize, *UDeviceName, DeviceType, DeviceCharacteristics, Exclusive, *DeviceObject) IoDeleteDevice(*DeviceObject) IoCreateSymbolicLink(*SymbolicLinkName, *DeviceName) IoDeleteSymbolicLink(*SymbolicLinkName) EndImport Structure MyData ; ,   . Plus_1.l Plus_2.l EndStructure ;     . Procedure DeviceIoControl(*DeviceObject.DEVICE_OBJECT, *pIrp.IRP) Protected *Stack.IO_STACK_LOCATION Protected *InpBuff, *OutBuff Protected InBuffSize, OutBuffSize Protected ntStatus, *MyData.MyData ntStatus = #STATUS_SUCCESS ;  . *Stack = *pIrp\Tail\Overlay\CurrentStackLocation ;   (. WinAPI  DeviceIoControl()) InBuffSize = *Stack\Parameters\DeviceIoControl\InputBufferLength OutBuffSize = *Stack\Parameters\DeviceIoControl\OutputBufferLength If InBuffSize >= SizeOf(Integer) And OutBuffSize >= 4 Select *Stack\Parameters\DeviceIoControl\IoControlCode Case #IOCTL_MyPlus *Point = *pIrp\SystemBuffer If *Point *MyData = PeekI(*Point) If *MyData Result.l = *MyData\Plus_1 + *MyData\Plus_2 PokeL(*pIrp\SystemBuffer, Result) *pIrp\IoStatus\Information = 4 Else ntStatus = #STATUS_BUFFER_TOO_SMALL *pIrp\IoStatus\Information = 0 EndIf EndIf Default ntStatus = #STATUS_UNSUCCESSFUL *pIrp\IoStatus\Information = 0 EndSelect Else ntStatus = #STATUS_BUFFER_TOO_SMALL ;    . *pIrp\IoStatus\Information = 0 EndIf *pIrp\IoStatus\Status = ntStatus IoCompleteRequest(*pIrp, #IO_NO_INCREMENT) ProcedureReturn ntStatus EndProcedure ;  .     . Procedure UnloadDriver(*DriverObject.DRIVER_OBJECT) Protected uniDOSString.UNICODE_STRING ;  -. RtlInitUnicodeString(@uniDOSString, ?DosDevices) ;   . IoDeleteSymbolicLink (@uniDOSString) ;  . IoDeleteDevice(*DriverObject\DeviceObject) EndProcedure ;         CreateFile(). Procedure CreateDispatch(*DeviceObject.DEVICE_OBJECT, *pIrp.IRP) *pIrp\IoStatus\Information = 0 *pIrp\IoStatus\Status = #STATUS_SUCCESS IoCompleteRequest(*pIrp, #IO_NO_INCREMENT) ProcedureReturn #STATUS_SUCCESS EndProcedure ;      CloseHandle(). Procedure CloseDispatch(*DeviceObject.DEVICE_OBJECT, *pIrp.IRP) *pIrp\IoStatus\Information = 0 *pIrp\IoStatus\Status = #STATUS_SUCCESS IoCompleteRequest(*pIrp, #IO_NO_INCREMENT) ProcedureReturn #STATUS_SUCCESS EndProcedure ;   .     . Procedure DriverEntry(*DriverObject.DRIVER_OBJECT, *RegistryPath.UNICODE_STRING) Protected deviceObject.DEVICE_OBJECT Protected uniNameString.UNICODE_STRING Protected uniDOSString.UNICODE_STRING ;  -. RtlInitUnicodeString(@uniNameString, ?Device) RtlInitUnicodeString(@uniDOSString, ?DosDevices) ;  . status = IoCreateDevice(*DriverObject, 0, @uniNameString, #FILE_DEVICE_UNKNOWN, 0, #False, @deviceObject) If status <> #STATUS_SUCCESS ProcedureReturn status EndIf ;         , ;      user-mode,  ,  ;       . status = IoCreateSymbolicLink(@uniDOSString, @uniNameString) If status <> #STATUS_SUCCESS IoDeleteDevice(@deviceObject) ProcedureReturn status EndIf ;     . *DriverObject\DriverUnload = @UnloadDriver() *DriverObject\MajorFunction[#IRP_MJ_CREATE] = @CreateDispatch() *DriverObject\MajorFunction[#IRP_MJ_CLOSE] = @CloseDispatch() ;       WinAPI DeviceIoControl(). *DriverObject\MajorFunction[#IRP_MJ_DEVICE_CONTROL] = @DeviceIoControl() ProcedureReturn #STATUS_SUCCESS EndProcedure ;   (). DataSection Device: !du '\Device\pbDrPlus', 0, 0 DosDevices: !du '\DosDevices\pbDrPlus', 0, 0 EndDataSection 


рдпрд╣ рд╡реНрдпрд░реНрде рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХрд╛ рдирд╛рдо DriverEntry () рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдирд▓реЛрдбрдбреНрд░рд╛рдЗрд╡рд░ () рдирд╛рдо рд╣реИ, рдХреЛ рднреА рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред CreateDispatch () рдФрд░ CloseDispatch () рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд╣реИрдВрдбрд▓рд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред
DeviceIoControl () рдкреНрд░рдХреНрд░рд┐рдпрд╛ DeviceIoControl () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП WinAPI рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧреА, рдЬреЛ рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдХрдиреЗрдХреНрд╢рди рд╣реИред рдХреЛрдб рдХреЗ рдЕрдВрдд рдореЗрдВ рддрдерд╛рдХрдерд┐рдд DataSection рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпреВрдирд┐рдХреЛрдб рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреНрд░рд╛рдЗрд╡рд░ рдирд╛рдо рд╣реИрдВ (рдЗрд╕рдХреЗ рд▓рд┐рдП, FASM рдХреЛрдбрд╛рдВрддрд░рдХ рдЪрд┐рдкреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдЕрдм рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЪрд╛рд▓рдХ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдЧрд╛ред рдпрд╣ DeviceIoControl () рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдВрджреЗрд╢ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ #IOCTL_MyPlus, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдореЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдХрд░реНрдиреЗрд▓ рдореЛрдб рдореЗрдВ рджреЛ рдирдВрдмрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╣ рд╢рд╛рдВрдд, рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ?)ред рдЬрдм рдРрд╕рд╛ рдХреЛрдИ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдмрдлрд░ рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдкрддрд╛ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рд╣рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕рд┐рд╕реНрдЯрдо рдмрдлрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓ рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рдо рд╣реИред

рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░рд▓рддрдо рдЧрдгрд┐рддреАрдп рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рдХреЛрдб рд▓рдЧрд╛ - рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЬреЛрдбрд╝?

рдЕрдм рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕реА PureBasic рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

 #DriverName = "pbDrPlus" #IOCTL_MyPlus = $200 XIncludeFile "..\DrUserModeFramework.pbi" Structure MyData ; ,   . Plus_1.l Plus_2.l EndStructure ;    -. DrFile.s = GetPathPart(ProgramFilename())+#DriverName+".sys" ;     ,    . hDrv=OpenDriver(DrFile, #DriverName, #DriverName, #DriverName) If hDrv=0 ;    . Driver_UnInstall(#DriverName) MessageRequester("", "  ") End EndIf ;    . Procedure.q Plus(hDrv, x1, x2) Protected MyData.MyData, Result, *Point MyData\Plus_1=x1 MyData\Plus_2=x2 *Point = @MyData DeviceIoControl_(hDrv, #IOCTL_MyPlus, @*Point, SizeOf(MyData), @Result, 4, @BytesReturned, 0) ProcedureReturn Result EndProcedure OpenWindow(1,300,300,140,90,"Title",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) StringGadget(1,10,10,50,20,"") StringGadget(2,10,40,50,20,"") TextGadget(3,70,30,70,20,"") Repeat ev=WaitWindowEvent() If ev=#PB_Event_Gadget op1=Val(GetGadgetText(1)) op2=Val(GetGadgetText(2)) Result = Plus(hDrv, op1, op2) SetGadgetText(3,Str(Result)) EndIf Until ev=#PB_Event_CloseWindow ;   ,     . If hDrv CloseHandle_(hDrv) hDrv=0 EndIf ;    . Driver_UnInstall(#DriverName) 


рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ OpenDriver () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдирд╛рдо, рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рдФрд░ рд╕реЗрд╡рд╛ рд╡рд┐рд╡рд░рдг рд╕рдорд╛рди рд╣реИрдВ - "pbDrPlus"ред рдпрджрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрдкрдирд╛ рдХрд╛рдо рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред

рдкреНрд▓рд╕ () рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд▓рдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддреА рд╣реИред рдпрд╣ рд╣реИрдВрдбрд▓, рдбреНрд░рд╛рдЗрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪ рдФрд░ рд╕рдорди рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо "рдкрд░рд┐рдгрд╛рдо" рдЪрд░ рдореЗрдВ рд╣реЛрдЧрд╛ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рд╕рд░рд▓рддрдо рдЬреАрдпреВрдЖрдИ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ ред

рдЬрдм рд╡рд┐рдВрдбреЛ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЗрд╕реЗ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ 8 рдФрд░ 2 рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдоред

рдЫрд╡рд┐

рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб "рдЙрджрд╛рд╣рд░рдг" рдлрд╝реЛрд▓реНрдбрд░, рдлрд╝рд╛рдЗрд▓ рд╡реЙрд╢ рдкрд░ рдкреНрдпреЛрд░рдмреЗрд╕рд┐рдХ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рд▓рд┐рдВрдХ рдХреЛ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдЫрд┐рджреНрд░реЛрдВ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдХрд░реНрдиреЗрд▓ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рдорд┐рд▓реЗрдЧрд╛ред

рдкреБрдирд╢реНрдЪред
рдпрд╛рдж рд░рдЦреЗрдВ, рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЫреЛрдЯреЗ рдЖрд╢реНрдЪрд░реНрдп, рдмреАрдПрд╕рдУрдбреА (рдореМрдд рдХреА рдиреАрд▓реА рд╕реНрдХреНрд░реАрди) рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЪрд╛рд▓рдХ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдм рдХреБрдЫ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред

рд╕рдВрднрд╛рд╡рд┐рдд рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реВрдБ!

Source: https://habr.com/ru/post/In145926/


All Articles