Пример #1
0
//
// Server unregistration
//
HRESULT _stdcall DllUnregisterServer()
{
	LONG	rc;
	char	errstr[128];

	rc = UnregisterAsioDriver (IID_ASIO_DRIVER,"ASIOSample.dll","ASIO Sample Driver");

	if (rc) {
		memset(errstr,0,128);
		sprintf(errstr,"Unregister Server failed ! (%d)",rc);
		MessageBox(0,(LPCTSTR)errstr,(LPCTSTR)"ASIO Korg1212 I/O Driver",MB_OK);
		return -1;
	}

	return S_OK;
}
Пример #2
0
//
// Server unregistration
//
HRESULT _declspec(dllexport) DllUnregisterServer()
{
    LONG    rc;
    char    errstr[128];

    rc = UnregisterAsioDriver (IID_ASIO_DRIVER[0],"kxasio.dll","kX ASIO Driver");
    rc = UnregisterAsioDriver (IID_ASIO_DRIVER[1],"kxasio.dll","kX ASIO Driver 1");
    rc = UnregisterAsioDriver (IID_ASIO_DRIVER[2],"kxasio.dll","kX ASIO Driver 2");
    rc = UnregisterAsioDriver (IID_ASIO_DRIVER[3],"kxasio.dll","kX ASIO Driver 3");
    rc = UnregisterAsioDriver (IID_ASIO_DRIVER[4],"kxasio.dll","kX ASIO Driver 4");
    rc = UnregisterAsioDriver (IID_ASIO_DRIVER[5],"kxasio.dll","kX ASIO Driver 5");
    rc = UnregisterAsioDriver (IID_ASIO_DRIVER[6],"kxasio.dll","kX ASIO Driver 6");
    rc = UnregisterAsioDriver (IID_ASIO_DRIVER[7],"kxasio.dll","kX ASIO Driver 7");

    if (rc) 
    {
                debug("kxasio: unregister failed\n");
        sprintf(errstr,"Unregister Server failed ! (%d)",rc);
        MessageBox(0,(LPCTSTR)errstr,(LPCTSTR)"kX ASIO Driver",MB_OK|MB_ICONSTOP);
        return -1;
    }

    return S_OK;
}
Пример #3
0
/*****************************************************************************
 * UnregisterServer()
 *****************************************************************************
 */
HRESULT 
UnregisterServer
(
	IN		LPTSTR	TargetSymbolicLink
)
{
	_DbgPrintF(DEBUGLVL_VERBOSE,("[UnregisterServer]"));

	HRESULT hr = S_OK;

	HKEY AsioPublicKey = NULL;

	DWORD w32Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE, ASIO_PUBLIC_KEY, 0, KEY_ALL_ACCESS, &AsioPublicKey);

	if (ERROR_SUCCESS == w32Error)
	{
		ULONG NumberOfSubKeys = 0;

		w32Error = RegQueryInfoKey(AsioPublicKey, NULL, NULL, NULL, &NumberOfSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

		if ((ERROR_SUCCESS == w32Error) && NumberOfSubKeys)
		{
			PASIO_DRIVER_INFORMATION DriverInfo = PASIO_DRIVER_INFORMATION(LocalAlloc(LPTR, NumberOfSubKeys * sizeof(ASIO_DRIVER_INFORMATION)));

			if (DriverInfo)
			{
				ZeroMemory(DriverInfo, NumberOfSubKeys * sizeof(ASIO_DRIVER_INFORMATION));

				for (ULONG i=0; i<NumberOfSubKeys; i++)
				{
					ULONG FriendlyNameLength = MAX_PATH;

					FILETIME LastWriteTime;	

					w32Error = RegEnumKeyEx(AsioPublicKey, i, DriverInfo[i].FriendlyName, &FriendlyNameLength, NULL, NULL, NULL, &LastWriteTime);
				}

				for (ULONG i=0; i<NumberOfSubKeys; i++)
				{
					BOOL FoundAsioDriverKey = FALSE;

					// Open the key up to check if our driver is the owner to this key.
					HKEY AsioDriverKey = NULL;

					w32Error = RegOpenKeyEx(AsioPublicKey, DriverInfo[i].FriendlyName, 0, KEY_ALL_ACCESS, &AsioDriverKey);
					
					if (ERROR_SUCCESS == w32Error)
					{
						ULONG Type = 0;					
						TCHAR AsioMarker[MAX_PATH];									
						ULONG Size = sizeof(AsioMarker);
									
						w32Error = RegQueryValueEx(AsioDriverKey, NULL, 0, &Type, PBYTE(AsioMarker), &Size);

						if (ERROR_SUCCESS == w32Error)
						{
							if (!_tcsicmp(AsioMarker, ASIO_MARKER))
							{
								// Key belong us...
								ULONG Type = 0;					
								WCHAR ClsIdStr[MAX_PATH];									
								ULONG Size = sizeof(ClsIdStr);

								w32Error = RegQueryValueExW(AsioDriverKey, L"CLSID", 0, &Type, PBYTE(ClsIdStr), &Size);
								
								if (ERROR_SUCCESS == w32Error)
								{
									CLSIDFromString(ClsIdStr, &DriverInfo[i].ClassId);
								}

								if (TargetSymbolicLink)
								{
									ULONG Type = 0;					
									ULONG Size = sizeof(DriverInfo[i].SymbolicLink);

									w32Error = RegQueryValueEx(AsioDriverKey, "SymbolicLink", 0, &Type, PBYTE(DriverInfo[i].SymbolicLink), &Size);

									if (ERROR_SUCCESS == w32Error)
									{
										if (!_tcsicmp(TargetSymbolicLink, DriverInfo[i].SymbolicLink))
										{
											FoundAsioDriverKey = TRUE;
										}
									}
								}
								else
								{
									FoundAsioDriverKey = TRUE;
								}
							}
						}
						
						RegCloseKey(AsioDriverKey);
					}

					if (FoundAsioDriverKey)
					{
						UnregisterAsioDriver(DriverInfo[i].FriendlyName, DriverInfo[i].ClassId);
					}
				}

				LocalFree(DriverInfo);
			}
		}

		RegCloseKey(AsioPublicKey);
	}

	return hr;
}