PID и програмен модул

Тази DLL съдържа функции, които Windows XP използва за проверка на инсталационния ключ (ProductKey).

Всички функции (с изключение на VerifyPIDSequenceW) са предназначени да генерират номера на продукта (ProductID) от ProductKey. ProductKey изглежда така: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX - пет полета с по пет знака, разделени с тире. Където х - това е един знак от специалния набор "BCDFGHJKMPQRTVWXY2346789". ProductID изглежда така: ххххх-ххх-ххххххх-ххххх или xxxxx-OEM-xxxxxxx-xxxxx за лиценз за търговия на дребно и OEM лиценз съответно. Където х - това е едно число. Ключът е номер, кодиран по специален начин. Тази двоична информация има специфично символно-цифрово представяне. Като определен брой в 24-арната бройна система, символите от горния набор се използват като числа. Целта на функциите е да дешифрират числото и да формират неговото текстово представяне.

От време на време има няколко функции, това не означава, че всяка се занимава с декодиране по свой начин. Една функция PIDGenA се занимава с реално дешифриране, а всички останали се занимават с предварителна трансформация (подготовка) на параметри и последващо извикване на функцията PIDGenA. Например, функции с суфикс W приемат параметри на низа като двубайтови WCHAR символи, преобразуват ги в еднобайтови символи CHAR и извикват съответната функция със суфикс А. Други функции имат по-малко параметри от PIDGenA, те наричат ​​PIDGenA, замествайки липсващите параметри с нули. Защо са необходими толкова много параметри е неизвестно, използва се само малка част от тях. В C ++ изглежда така:

BOOL WINAPI PIDGenA (LPCSTR, // [IN] szSetupKey LPCSTR, // [IN] szProductType LPCSTR, // [IN] szA22-00001 LPVOID, // NULL LPVOID, // NULL LPVOID, // NULL LPVOID, // NULL LPVOID, // NULL BOOL, // [IN] bOEM, FALSE - Retail, TRUE - OEM LPSTR, // [OUT] szProductID PDIGITAL_PID, // [OUT] pDigitalProductID LPVOID, // NULL LPVOID *, // НЕ ИЗПОЛЗВАН LPVOID ); // НУЛА