10.3 Coding example of a script control interface
A coding example of a script control interface is shown below.
Example
#include <windows.h> #include <stdio.h> #include <stdlib.h> #include "sthapi.h" BOOL TerminateScript(LPCSTR lpszNetName, LPCSTR lpszFileName, UINT uProcessID) { HKEY hKey; LPCSTR subKey = "SOFTWARE\\WOW6432Node\\Hitachi\\JP1/Script\\PathName"; char valueName[32]; char value[_MAX_PATH]; DWORD valueSize = sizeof(value); HINSTANCE hAPIInstance; tSPTHOpen pSPTHOpen; tSPTHClose pSPTHClose; tSPTHTerminate pSPTHTerminate; HANDLE hScript; // Open the registry. if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS) { // Error processing return(FALSE); } // Get the "SPTHL.DLL" path. strcpy(valueName, "Path01"); if(RegQueryValueEx(hKey, valueName, 0, NULL,(LPBYTE) value, &valueSize) != ERROR_SUCCESS) { // Error processing return(FALSE); } // Load "SPTHL.DLL". strcat(value, "\\SPTHL.DLL"); hAPIInstance = LoadLibraryEx(value, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); if(hAPIInstance == NULL) { // Error processing return(FALSE); } // Get the entry point of each function. pSPTHOpen = (tSPTHOpen) GetProcAddress(hAPIInstance, "SPTHOpen"); pSPTHClose = (tSPTHClose) GetProcAddress(hAPIInstance, "SPTHClose"); pSPTHTerminate = (tSPTHTerminate(GetProcAddress(hAPIInstance, "SPTHTerminate"); // Open DLL. if(pSPTHOpen(lpszNetName, NULL, &hScript) == FALSE) { FreeLibrary(hAPIInstance); return(FALSE); } // Forcibly terminate script execution. if (pSPTHTerminate(hScript, lpszFileName, uProcessID, SPTH_TERM_CHILD) == FALSE) { pSPTHClose(hScript); FreeLibrary(hAPIInstance); return(FALSE); } // Close DLL. pSPTHClose(hScript); // Release the API interface handle. FreeLibrary(hAPIInstance); return(TRUE); }