Все ли системные интерфейсы canonical com заканчиваются на -0000-0000-c000-000000000046? - PullRequest
0 голосов
/ 30 августа 2018

Все ли системные интерфейсы canonical com заканчиваются на -0000-0000-c000-000000000046?

Предполагается, что направляющие создаются случайным образом, но при просмотре реестра используются канонические системные интерфейсы COM, такие как IUnknown {00000000-0000-0000-c000-000000000046}, IClassFactory {00000001-0000-0000-c000-000000000046}, IDispatch { 00020400-0000-0000-c000-000000000046} имеют шаблон.

Есть ли API-функция с именем IsSystemInterface() или что-то, что я могу вызвать для проверки. Или мне просто струну сравнить хвост?

РЕДАКТИРОВАТЬ: в случае использования не будет библиотеки типов для этих канонических интерфейсов, поэтому их необходимо экранировать.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Некоторые Код C ++ Строки 89-210 показывают оптимизацию, которая возможна, поскольку эти интерфейсы имеют одинаковый суффикс.

// 
// the first dword of GUIDs for most of the interesting interfaces.  these are
// used by speed critical versions of QueryInterface 
//
#define Data1_IAdviseSink                  0x0000010f
#define Data1_IAdviseSink2                 0x00000125
#define Data1_IAdviseSinkEx                0x3af24290
...
0 голосов
/ 31 августа 2018

Нет, это не гарантируется.

Куча исходных системных интерфейсов COM имеет такую ​​форму, но большинство, если не все новые, не имеют.

например. оригинал IShellFolder:

DEFINE_GUID(IID_IShellFolder, 0x000214E6L, 0, 0, 0xC0,0,0,0,0,0,0,0x46);

Поздний расширенный интерфейс, IShellFolder2:

DEFINE_GUID(IID_IShellFolder2, 0x93f2f68c, 0x1d1b, 0x11d3, 0xa3, 0xe, 0x0, 0xc0, 0x4f, 0x79, 0xab, 0xd1);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...