Очевидно, вам нужно заполнить структуру SHELLEXECUTEINFO, в поле fMask установлено значение SEE_MASK_CLASSKEY, в поле lpVerb установлено значение "open", а в поле lpClass указано значение GUID.
Тем не менее, я никогда не получал эту чертову работу. Вместо этого я использовал файл правильного типа для использования в вызове CreateProcess.
HINSTANCE h = FindExecutable("blank.htm", NULL, buffer);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
char url[MAX_PATH];
sprintf(url, "\"%s\" %s", buffer, (LPCTSTR)m_url);
CreateProcess(NULL, url, NULL, NULL, FALSE, 0 , NULL, NULL, &si, &pi);
Открывает приложение, которое определено как средство просмотра по умолчанию для файлов типа .htm.