Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ БОМ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 27

Автор Π”ΠΎΠ½Π°Π»ΡŒΠ΄ Бокс

if (SUCCEEDED(hr))

{

IApe *pApe = 0;

// use the class object to create a new gorilla

// ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса для создания Π½ΠΎΠ²ΠΎΠΉ Π³ΠΎΡ€ΠΈΠ»Π»Ρ‹

hr = pgc->CreateApe(&pApe);

if (SUCCEEDED(hr))

{

// tell the new gorilla to eat a banana

// ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΉ Π³ΠΎΡ€ΠΈΠ»Π»Π΅ Π΅ΡΡ‚ΡŒ Π±Π°Π½Π°Π½Ρ‹

hr = pApe->EatBanana();

pApe->Release();

}

pgc->Release();

}

return hr;

}


ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ спСцифичСского использования ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IApeClass, эти ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ слоТныС интСрфСйсы, Ρ‚ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для модСлирования довольно ΠΈΠ·ΠΎΡ‰Ρ€Π΅Π½Π½ΠΎΠΉ стратСгии Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ размСщСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².


ΠšΠ»Π°ΡΡΡ‹ ΠΈ сСрвСры

БОМ-сСрвСр – это Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», содСрТащий ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ БОМ-классов. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ ΠΈΠ»ΠΈ Π² динамичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (DLL), ΠΈΠ»ΠΈ Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ». Π’ любом случаС Π·Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ любого Ρ‚ΠΈΠΏΠ° сСрвСра автоматичСски ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ диспСтчСр управлСния сСрвисами SCM.

Если Π² запросС Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡƒΠΊΠ°Π·Π°Π½Π° внутрипроцСссная активация, Ρ‚ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сСрвСра Π½Π° Π±Π°Π·Π΅ DLL Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² адрСсном пространствС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Если ΠΆΠ΅ Π² запросС Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ внСпроцСссная ΠΈΠ»ΠΈ внСхостовая активация, Ρ‚ΠΎ для запуска сСрвСрного процСсса Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ хост-машинС (ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с машиной ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°) Π±ΡƒΠ΄Π΅Ρ‚ использован исполняСмый Ρ„Π°ΠΉΠ». БОМ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ DLL-сСрвСров Π² суррогатных процСссах (surrogate processes) с Ρ†Π΅Π»ΡŒΡŽ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ использованиС внСпроцСссной ΠΈ внСхостовой Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… внутрипроцСссных сСрвСров. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ суррогатныС процСссы связаны с внСпроцСссной ΠΈ внСхостовой Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Π³Π»Π°Π²Π΅ 6.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π΅ бСспокоясь ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ сСрвСр ΠΈΠ»ΠΈ Π³Π΄Π΅ ΠΎΠ½ инсталлирован, Π² БОМ прСдусмотрСна конфигурационная Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ CLSID Π½Π° Ρ‚ΠΎΡ‚ сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ этот класс. ΠŸΡ€ΠΈ использовании вСрсий Windows NT 5.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ основным мСстом располоТСния этой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… являСтся дирСктория NT (NT Directory). Π­Ρ‚Π° дирСктория являСтся рассрСдоточСнной Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится слуТСбная информация ΠΎΠ± ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… записях ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, хост-ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅. Π‘ Ρ‚Π΅ΠΌ ΠΆΠ΅ успСхом Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ NT ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΠΎ БОМ-классах. Π­Ρ‚Π° информация записываСтся Π² области Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ БОМ Class Store (Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ БОМ-классов). БОМ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Class Store для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° CLSID Π² Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π² случаС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… запросов Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ) ΠΈΠ»ΠΈ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ хост-ΠΈΠΌΠ΅Π½Π° (Π² случаС ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… запросов Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ). Если запрос Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ для CLSID сдСлан Π½Π° Π΄Π°Π½Π½ΠΎΠΉ машинС, Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш. Если Π² локальном кэшС Π½Π΅Ρ‚ доступной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‚ΠΎ БОМ посылаСт запрос Π² Class Store ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ рСализация стала доступной ΠΈΠ· локальной ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ просто ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ запрос Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ хост-ΠΌΠ°ΡˆΠΈΠ½Ρƒ, ΠΈΠ»ΠΈ ΠΆΠ΅ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΈ ΠΊ запуску ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ инсталляции. Π’ любом случаС, Ссли класс зарСгистрирован Π² Class Store, ΠΎΠ½ доступСн для запроса Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ со стороны ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ бСзопасности.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш, ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π²ΡˆΠΈΠΉΡΡ ΠΏΡ€ΠΈ обсуТдСнии Class Store, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ называСтся систСмным рССстром, ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ систСмы (Registry). РССстр являСтся иСрархичСской Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, хранящСйся Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ машинС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ БОМ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для прСобразования CLSID Π² ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² (Π² случаС локальной Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ) ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° хостов (Π² случаС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ). Π”ΠΎ Windows NT 5.0 рССстр Π±Ρ‹Π» СдинствСнным мСстом размСщСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ БОМ. Быстрый поиск Π² рССстрС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ осущСствлСн с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ иСрархичСских ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (keys), ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой строки, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ косыми Ρ‡Π΅Ρ€Ρ‚Π°ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² рССстрС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² своСм составС строки, Ρ†Π΅Π»Ρ‹Π΅ значСния ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ БОМ Π½Π° Windows NT 4.0 большая Ρ‡Π°ΡΡ‚ΡŒ Π΅Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ записываСтся ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ

HKEYLOCALMACHINE\Software\Classes

Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ псСвдоним

HKEYCLASSESROOT

РСализация БОМ Π½Π° Windows NT 5.0 ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HKEYCLASSESROOT для установок Π² Ρ€Π°ΠΌΠΊΠ°Ρ… всСй ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ свою ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ CLSID для обСспСчСния большСй бСзопасности ΠΈ гибкости. Под Windows NT 5.0 БОМ Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚

HKEYCURRENTUSER\Software\Classes 

ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ HKEYCLASSESROOT. Для удобства записи часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Π±Π±Ρ€Π΅Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ HKLM, HKCR ΠΈ HKCU вмСсто HKEYLOCALMACHINE, HKEYCLASSESROOT ΠΈ HKEYCURRENTUSER , соотвСтствСнно[1]. 

БОМ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΎΡ‚Π½ΠΎΡΡΡ‰ΡƒΡŽΡΡ ΠΊ CLSID всСх машин, ΠΏΠΎΠ΄ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ рССстра HKCR\CLSID

Π’ вСрсии Windows NT 5.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ БОМ ΠΈΡ‰Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ классах ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎΠ΄ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ HKCU\Software\Classes\CLSID

Под ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· этих ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ сохранСн список Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… CLSID, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ CLSID – свой ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡. НапримСр, класс Gorilla, использовавшийся Ρ€Π°Π½Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅, ΠΌΠΎΠ³ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎ всСй машинС запись ΠΏΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρƒ[2]:


[HKCR\CLSID\{571F1680-CC83-11d0-8C48-0080C73925BA}]

@="Gorilla"


Для обСспСчСния локальной Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Gorilla запись для CLSID Gorilla Π² рССстрС Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» содСрТит исполняСмый ΠΊΠΎΠ΄ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса. Если сСрвСр ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ DLL, Ρ‚ΠΎ трСбуСтся такая запись:


[HKCR\CLSID\{571F1680-CC83-11d0-8C48-0080C73925BA}\InprocServer32]

@="C:\ServerOfTheApes.dll"


Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ Π² исполняСмом Ρ„Π°ΠΉΠ»Π΅, трСбуСтся такая запись:


[HKCR\CLSID\{571F1680-CC83-11d0-8C48-0080C73925BA}\LocalServer32]

@="Π‘:\ServerOfTheApes.exe"


Допустимо ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π΅ записи ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ мСстополоТСниС, исходя ΠΈΠ· Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ устойчивости. Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ProgIDFromCLSID Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡:


[HKCR\CLSID\{571F1680-CC83-11d0-8C48-0080C73925BA}\ProgID]

@="Apes.Gorilla.1"


Наоборот, для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CLSIDFromProgID Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹:


[HKCR\Apes.Gorilla.1] @="Gorilla" [HKCR\Apes.Gorilla.1\CLSID]

@="\{571F1680-CC83-11d0-8C48-0080C73925BA}


ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ (ProgID) Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π½ΠΎ ΠΎΠ½ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Ρ‚Π΅Ρ… срСдах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ просто ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ CLSID, Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ.

ВсС стандартно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ сСрвСры БОМ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΡΠ°ΠΌΠΎΡ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ. Для внутрипроцСссного сСрвСра это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ DLL Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ извСстныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ


STDAPI DllRegisterServer(void);

STDAPI DllUnregisterServer(void);


ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ STDAPI являСтся просто макросом, ΠΈΠ½Π΄ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ, Ρ‡Ρ‚ΠΎ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ НRESULT ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ стандартноС соглашСниС БОМ ΠΏΠΎ Π²Ρ‹Π·ΠΎΠ²Ρƒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ явно экспортированы с использованиСм ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Π° опрСдСлСния модуля, ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² компилятора. Π­Ρ‚ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ классов Class Store для конфигурирования локального кэша послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΡ€ΠΎΠΌΠ΅ Class Store эти извСстныС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ срСдами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Microsoft Transaction Server, ActiveX Code Download, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ инсталляционными ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ) для инсталляции ΠΈΠ»ΠΈ дСинсталляции сСрвСров Π½Π° хост-ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…. Π’ Win32 SDK Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° REGSVR32.EXE, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½ΡΡ‚Π°Π»Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄Π΅ΠΈΠ½ΡΡ‚Π°Π»Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ внутрипроцСссный сСрвСр БОМ с использованиСм этих извСстных экспортированных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ внутрипроцСссных сСрвСров DllRegisterServer ΠΈ DllUnregisterServer Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ рССстр Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΡ… CLSID ΠΈ ProgID сСрвСра Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° сСрвСра. Π₯отя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этих ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ эффСктивным ΠΈΠ· Π½ΠΈΡ… являСтся созданиС строковой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, содСрТащСй ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ, названия Π²Π΅Π»ΠΈΡ‡ΠΈΠ½, сами Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈ простоС пСрСчислСниС всСх записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° RegSetValueEx для инсталляции ΠΈ RegDeleteKey для дСинсталляции. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ просто Π·Π°Π΄Π°Ρ‚ΡŒ массив строк Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Nx3 , Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ряд массива содСрТит строки для использования Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΈΠΌΠ΅Π½Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ ΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹:


const char *gRegTable[][3] = {

// format is { key, value name, value }

{

Β«CLSID\\{571F1680-CC83-11d0-8C48-0080C73925BA}Β», 0, Β«GorillaΒ»

},

{

"CLSID\\{571F1680-CC83-11d0-8C48-0080C73925BA}

\\InprocServer32",0, (const char*)-1

// rogue value indicating file name

// нСстандартноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ имя Ρ„Π°ΠΉΠ»Π°

},

{

Β«CLSID\\{571F1680-CC83-11d0-8C48-0080C73925BA}\\ProgIDΒ», 0, «АрСs.Gorilla.1Β»

},

{

Β«Apes.GorillΠ°.1Β», 0, Β«GorillaΒ»

},

{

Β«Apes.Gorilla.1\\CLSIDΒ», 0, Β«{571F1680-CC83-11d0-8C48-0080C73925BA}Β»

},

};


ИмСя эту Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, вСсьма нСслоТно ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ DllRegisterServer: