Windows օպերացիոն համակարգերի կիրառական ծրագրավորման միջերեսը ներկայացված է մի շարք գործառույթներով: Երբ դրանք կանչվում են, կարող են ստեղծվել տարբեր օբյեկտներ (ֆայլեր, գործընթացներ, թելեր, համաժամացման օբյեկտներ և այլն): Այս օբյեկտներին բավականաչափ վերացական և միասնական հասանելիություն ապահովելու համար դրանց նույնականացումը կատարվում է նկարագրիչների `« անանձնական »թվային արժեքների միջոցով:
Անհրաժեշտ է
- - ծրագրավորող լեզվից թարգմանիչ, որը թույլ է տալիս օգտագործել Windows API- ն.
- - հնարավոր է Windows Platform SDK:
Հրահանգներ
Քայլ 1
Ձեռք բերեք պատուհանի բռնակներ: Դա անելու շատ եղանակներ կան: Exactշգրիտ մեթոդը կախված է վերջնական նպատակից:
Պատուհան ստեղծելու համար օգտագործեք CreateWindow կամ CreateWindowEx API- ներ: Նրանք վերադարձնում են հաջողության բռնակ, իսկ անհաջողության ՝ NULL:
Վերևի պատուհանների և մանկական պատուհանների որոնում ՝ տարբեր պարամետրերով, համապատասխանաբար, օգտագործելով FindWindow և FindWindowEx: Հաջող որոնման արդյունքում կստացվի պատուհանի բռնակը:
Թվարկեք պատուհանները EnumWindows, EnumChildWindows, EnumThreadWindows գործառույթներով: Գտնված պատուհանների բռնակները կփոխանցվեն որպես պարամետր հետադարձ զանգի գործառույթին:
Գտեք բռնիչը էկրանի որոշակի դիրքում գտնվող պատուհանի մոտ: Callանգահարեք գործառույթներից մեկը ՝ WindowFromPoint, ChildWindowFromPoint կամ ChildWindowFromPointEx:
Քայլ 2
Ձեռք բերեք գործընթացի բռնակներ: Ստեղծեք նոր գործընթաց ՝ զանգահարելով CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW կամ CreatProcessWithLogonW API գործառույթներ: Նրանք բոլորը մի գործընթաց են վերադառնում PROCESS_INFORMATION կառուցվածքի hProcess դաշտի նոր գործընթացին, որի ցուցիչը պետք է փոխանցվի նրանց որպես վերջին պարամետր:
Գտեք գործընթացի բռնակը իր հայտնի նույնացուցիչով: Օգտագործեք OpenProcess զանգը: Գործող բոլոր գործընթացների նույնականությունները կարելի է ձեռք բերել, օրինակ `ToolTop գրադարանի CreateToolhelp32Snapshot, Process32First և Process32Next գործառույթների միջոցով:
Վերցրեք ընթացիկ գործընթացի կեղծ կտրոնը `օգտագործելով GetCurrentProcess գործառույթը:
Քայլ 3
Ստացեք թելերի նկարագրիչները: CreateThread- ի և CreateRemoteThread- ի գործառույթները, համապատասխանաբար, թելեր են ստեղծում իրենց և ուրիշի գործընթացներում `վերադարձնելով նրանց բռնակները: Կարող եք բացել գոյություն ունեցող շարանը ՝ օգտագործելով դրա նույնացուցիչը և ստանալու համապատասխան բռնիչը ՝ օգտագործելով OpenThread գործառույթը: Ընթացիկ հոսքի կեղծ-բռնիչը վերադարձվում է, երբ կանչվում է GetCurrentThread- ը:
Քայլ 4
Ֆայլերի, գրացուցակների, ֆիզիկական սկավառակների, սկավառակների ծավալների, կոնսոլների, կապի ռեսուրսների (I / O պորտեր), փոստի բնիկների և անվանված խողովակների նկարագրիչները կարելի է ձեռք բերել ՝ զանգահարելով մեկ գործառույթ ՝ CreatFile:
Քայլ 5
Ֆայլից հիշողություն քարտեզագրող օբյեկտի նկարագրիչները վերադարձվում են CreatFileMapping և OpenFileMapping զանգերով:
Քայլ 6
CreateMutex, CreateSemaphore և CreateEvent գործառույթները ստեղծում են, իսկ OpenMutex, OpenSemaphore և OpenEvent գործառույթները բացում են առկա համաժամացման օբյեկտները (mutexes, semaphores և events): Նրանք բոլորը վերադարձնում են նկարագրիչները:
Քայլ 7
GDI- ի բոլոր օբյեկտները (ինչպիսիք են սարքի համատեքստերը, տառատեսակները, խոզանակները, մատիտները, ապարատային կախված և անկախ բիտման քարտեզները, DIB բաժինները և այլն) շահարկվում են իրենց նկարագրիչների միջոցով: GDI օբյեկտների ստեղծման գործառույթները բազմաթիվ են, դրանց վերաբերյալ տեղեկատվության համար պետք է դիմեք MSDN բաժնում:
Քայլ 8
Մի գործընթացում ստացված նկարագրիչը, որպես կանոն, չի կարող օգտագործվել մեկ այլ գործընթացում: Այնուամենայնիվ, որոշ դեպքերում հնարավոր է ձեռք բերել կրկնօրինակ նկարագրիչ, որը համապատասխանում է առաջնային օբյեկտին: Կանչը կրկնօրինակելու համար զանգահարեք DuplicateHandle API: Սա կարող է օգտագործվել, օրինակ, անանուն համաժամացման օբյեկտներ կամ ալիքներ բաժանելու համար բազմաթիվ գործընթացների միջև: