Функция GcaCodeRun исполняет код, загруженный в ключ, из другого участка загруженного кода.

int GRD_API GcaCodeRun(
            HANDLE  hGrd,
            DWORD   dwAlgoName,
            DWORD   dwP1,
            DWORD   *pdwRet,
            DWORD   dwDataFromDongleLng,
            void    *pDataFromDongle,
            DWORD   dwDataToDongleLng,
            void    *pDataToDongle,
            void    *pReserved 
); 	

hGrd

Не используется.

dwAlgoName

Числовое имя алгоритма

dwP1

Параметр, передаваемый в подфункцию (аналог main ) загружаемого кода.

pdwRet

Параметр, возвращаемый из подфункции (аналог main ) загружаемого кода.

dwDataFromDongleLng

Размер блока данных, получаемых из ключа

pDataFromDongle

Указатель на буфер для блока данных, получаемых из ключа

dwDataToDongleLng

Размер блока данных передаваемых в ключ.

pDataToDongle

Указатель на буфер для блока данных, передаваемых в ключ

pReserved

Зарезервировано. Должно быть NULL.

Набор ошибок Guardant API

Функция GcaCodeRun аналогична GrdCodeRun из внешнего Guardant API, она служит для запуска кода, предварительно загруженного в ключ, из другого участка загруженного в ключ кода.

При использовании GcaCodeRun, области ОЗУ запускающего и запускаемого загружаемого кода не должны пересекаться или совпадать для предотвращения затирания общей памяти. Рекурсия запрещена. При попытке вызова GcaCodeRun в описанных выше ситуациях возвращается код ошибки GrdE_gcRamAccessViolation. Глубина таких вызовов равна 1. Таким образом, при попытке запуска загружаемого кода из другого загружаемого кода, запущенного, в свою очередь, с помощью GcaCodeRun, возвращается код ошибки GrdE_gcCallDepthOverflow.

В main-функцию пользовательского кода передается параметр dwP1 и буфер данных pDataToDongle. По завершению работы main-функции пользовательского кода, она возвращает pdwRet и буфер данных pDataToDongle.

Время работы main функции пользовательского кода ограничено 3 сек по умолчанию, если иное не задано GcaSetTimeout.