
рд╕рднреА рдХреЛ рдмрдзрд╛рдИ!
рдпрд╣ рд▓рдШреБ рд▓реЗрдЦ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдмрдирд╛рдиреЗ рдХреЗ рдПрдХ рддрд░реАрдХреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдХрд░реНрдиреЗрд▓ рдореЛрдб рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рджреЛрдиреЛрдВ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдФрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рднреА рд╣реЛрдВрдЧреЗ рддрд╛рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рд╕рдХреЗред
рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ 32-рдмрд┐рдЯ рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреА рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЗрд╕рдиреЗ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдБрдЪ рдХреА рдФрд░
32-рдмрд┐рдЯ рд╡рд┐рдВрдбреЛрдЬ 7 рдкрд░)редрдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдбрдмреНрд▓реНрдпреВрдбреАрдХреЗ (рдбреАрдбреАрдХреЗ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛, рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдЪреБрдирдирд╛, рдорд╛рдирдХ рдЪрд╛рд▓рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛, рдЖрджрд┐ (рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк
рдЗрд╕реЗ рдФрд░
рд╡рд╣ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╣рд╛рдВ рднреА рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ)ред рд▓реЗрдЦ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдлреВрд▓рд╛ рд╣реБрдЖ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд┐рдЯ
рдбреНрд░рд╛рдЗрд╡рд░ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдереНрд░реЗрдб рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдереНрд░реЗрдб рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЪрд╛рд▓рдХ рдХреЛ
рдПрдХ рдордирдорд╛рдирд╛ рдзрд╛рдЧрд╛ (
рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ ) рдХреЗ
рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдореИрдк рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рд╕рдореНрдорд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдПрдХрд▓-рд╕реНрддрд░ рд╣реИ рдФрд░ рд╣рдо
IRP_MJ_DEVICE_CONTROL рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╡рд╛рд╣ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреАред
рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди
#pragma LOCKEDCODE NTSTATUS AllocateSharedMemory(PDEVICE_EXTENSION pdx, PIRP Irp) {
рднрд╛рдЧреЛрдВ рдореЗрдВ рдХрд╛рд░реНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг:рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:
pdx->vaReturned = (unsigned short **) GenericGetSystemAddressForMdl(Irp->MdlAddress);
рдЕрдЧрд▓рд╛ рдЪрд░рдг рдЖрдХрд╛рд░ рдХреА рдореЗрдореЛрд░реА рдХреЗ рдЧреИрд░-рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЖрд╡рдВрдЯрди рд╣реИред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдордбреАрдПрд▓ (
рдореЗрдореЛрд░реА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд▓рд┐рд╕реНрдЯ ) рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рд╕реВрдЪрдХ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЪрд░ pdx-> mdl рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
pdx->mdl = MmAllocatePagesForMdl(pstart, pstop, pskip, memory_size);

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЫрд╡рд┐ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рднреМрддрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдордбреАрдПрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддрдм рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдореЗрдВ MDL рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ рдХреА рд░реЗрдВрдЬ рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рдЗрди рдкреЗрдВрдбрд░реНрд╕ рдкрд░ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ-> kernel_va:
pdx->kernel_va = (unsigned short*) MmGetSystemAddressForMdlSafe(pdx->mdl, NormalPagePriority);
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзрд╛рд░рд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрддреЗ рд╕рд┐рд╕реНрдЯрдо рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ)ред
рд▓реВрдк рдореЗрдВ, рдкрд╣рд▓реЗ 10 рдореЗрдореЛрд░реА рд╕реЗрд▓ рдХреЛ 10 рд╕реЗ 1 рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреЗрдВ, рддрд╛рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХреЗрдВ:
for (int i = 0; i < 10; ++i) { pdx->kernel_va[i] = 10 - i;
рдЕрдм рдЖрдкрдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдореЗрдВ рдореИрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдбреНрд░рд╛рдЗрд╡рд░ рддрдХ рдкрд╣реБрдБрдЪрд╛ рд╣реЛ:
pdx->user_va = (unsigned short*) MmMapLockedPagesSpecifyCache(pdx->mdl, UserMode, MmCached, NULL, FALSE, NormalPagePriority);
рдЪрд░ pdx-> vaReturned рдПрдХ рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ рдФрд░ pdx рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рджреЗрдЦреЗрдВред source_driver рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ)ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП pdx-> user_va рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ:
*pdx->vaReturned = pdx->user_va;
рдореБрдХреНрдд рд╕реНрдореГрддрд┐
#pragma LOCKEDCODE NTSTATUS ReleaseSharedMemory(PDEVICE_EXTENSION pdx, PIRP Irp) {
рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрддрд╛ рд╕реНрдерд╛рди рдЦрд╛рд▓реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
MmUnmapLockedPages(pdx->user_va, pdx->mdl);
рд╕рд┐рд╕реНрдЯрдо рдкрддрд╛ рд╕реНрдерд╛рди:
MmUnmapLockedPages(pdx->kernel_va, pdx->mdl);
рдлрд┐рд░ рднреМрддрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
MmFreePagesFromMdl(pdx->mdl);
рдФрд░ "рдорд╛рд░" рдПрдордбреАрдПрд▓:
IoFreeMdl(pdx->mdl);
рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдкреАрд▓ рдХрд░рддреЗ рд╣реИрдВ
(рд╕рдВрд▓рдЧреНрди рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдЖрд╡реЗрджрди рдХреЛрдб рджреЗрдЦреЗрдВ)рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐
CreateFile () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореИрдирд┐рдкреНрдпреБрд▓реЗрдЯрд░ (рд╣реИрдВрдбрд▓) рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
hDevice = CreateFile(L"\\\\.\\SharedMemory", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
рддрдм рдЖрдкрдХреЛ
DeviceIoControl () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ I / O рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
unsigned short** vaReturned = new unsigned short*(); ioCtlCode = IOCTL_ALLOCATE_SHARED_MEMORY; checker = DeviceIoControl(hDevice, ioCtlCode, NULL, 0, vaReturned, sizeof(int), &bytesReturned, NULL);
рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ IRP рдкреИрдХреЗрдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдбрд┐рд╕реНрдкреИрдЪ рдлрд╝рдВрдХреНрд╢рди (рдбреНрд░рд╛рдЗрд╡рд░ рдХрдВрдЯреНрд░реЛрд▓рд╕реАрдкреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ DispatchControl) рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╛рдиреА DeviceIoControl () рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдирд┐рдпрдВрддреНрд░рдг рдбреНрд░рд╛рдЗрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдХреЛрдб рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдбрд┐рд╡рд╛рдЗрд╕, рдбрд┐рдмрдЧ рд╡реНрдпреВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ DeviceIoControl () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп (рдЖрдкрдХреЛ рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХрд░реНрдиреЗрд▓ рдореЛрдб рдИрд╡реЗрдВрдЯ рдХреЛ рдкрдХрдбрд╝ рд▓реЗ) рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:

рдЬрдм рдирд┐рдпрдВрддреНрд░рдг рдЖрд╡реЗрджрди рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ vaReturned рдЪрд░ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдореЛрд░реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛)ред рдЪрд▓реЛ рд╕реНрдореГрддрд┐ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реВрдЪрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд░рд▓реАрдХрд░рдг рдХрд░реЗрдВ:
unsigned short* data = *vaReturned;
рдЕрдм,
рдбреЗрдЯрд╛ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ:

рдЬрдм рдЖрдк "рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреНрд░рд╛рдЗрд╡рд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ
рдбреЗрдЯрд╛ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред тАЬFill TextEditтАЭ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкрд╣рд▓реЗ 10 рддрддреНрд╡реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ QTextEdit рдореЗрдВ рднрд░реЗ рдЧрдП рдереЗ рдФрд░ рд╣рдо рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдлрд▓ рдХреЙрд▓ рджреЗрдЦрддреЗ рд╣реИрдВред
рдЬрдм рдЖрдк "рд░рд┐рд▓реАрдЬрд╝ рдореЗрдореЛрд░реА" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрдорд┐рдд рдПрдордбреАрдПрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб
1.
source_driver.rar ред
2.
source_app.rar ред
3.
source_generic_oneyрдбреНрд░рд╛рдЗрд╡рд░ (source_driver) рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╡рд╛рд▓реНрдЯрд░ рдУрдиреА рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдЙрдирдХреА рдХрд┐рддрд╛рдм рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, Microsoft Windows рдбреНрд░рд╛рдЗрд╡рд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдЬреЗрдиреЗрд░рд┐рдХ рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬреЛ рд▓реЛрдЧ рдЦреБрдж рдЗрд╕реЗ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ (рдЙрджрд╛ред C: \ рдбреНрд░рд╛рдЗрд╡рд░) рдФрд░ рд╡рд╣рд╛рдВ рд╕реНрд░реЛрдд (source_driver, source_generic_oney рдФрд░ source_app) рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирдП рдЙрдкрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (inf-file: sharememory.inf рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ) - рдирдП рдЙрдкрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (Windows XP рдХреЗ рд▓рд┐рдП)ред рдлрд┐рд░ рдЖрдкрдХреЛ habr_app.exe (source_app / release) рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ:
1. рдЖрдкрдХреЛ
рдбрдмреНрд▓реНрдпреВрдбреАрдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
2. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЬреЗрдиреЗрд░рд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдУрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ, XP рдХреЗ рд▓рд┐рдП - Winjchk_wxp_x86, Win7 рдХреЗ рд▓рд┐рдП - objchk_win7_x86)ред
3. рдЕрдВрдХ 1 рдФрд░ 2 рдХреЗ рдмрд╛рдж, рдЖрдк WDK рдореЗрдВ рд╢рд╛рдорд┐рд▓ x86 рдЪреЗрдХреНрдб рдмрд┐рд▓реНрдб рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ "рдмрд┐рд▓реНрдб" рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ
- Wasm.ru рд╕реЗ рд▓реЗрдЦ
- рд╡рд╛рд▓реНрдЯрд░ рд╡реЗ "рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╡рд┐рдВрдбреЛрдЬ рдбреНрд░рд╛рдЗрд╡рд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ" (рдЖрдИрдПрд╕рдмреАрдПрди 978-5-91180-057-4, 0735618038)ред
- рдкреЗрд╢реЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдЬреЗрдлрд░реА рд░рд┐рдХреНрдЯрд░ рд╡рд┐рдВрдбреЛрдЬред рдкреНрд░рднрд╛рд╡реА Win32 рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг тАЭ(рдЖрдИрдПрд╕рдмреАрдПрди 5-272-00384-5, 1-57231-996-8)ред
- MSDN
UPD: jon
habrayuzer рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ
рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐
рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА Qt ред