mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-05 18:01:34 +00:00
bbdf6d5e21
One local driver can be assigned to multiple driver ids. When releasing the driver id, check if the reference count of a local driver is one before actually releasing the local driver. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46520 Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com> Signed-off-by: Andrew Eikum <aeikum@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
155 lines
5.7 KiB
C
155 lines
5.7 KiB
C
/* -*- tab-width: 8; c-basic-offset: 4 -*- */
|
|
/*
|
|
* Copyright 2000 Eric Pouech
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*/
|
|
|
|
#ifndef __WINE_WINEACM_H
|
|
#define __WINE_WINEACM_H
|
|
|
|
#include <windef.h>
|
|
#include <winuser.h>
|
|
|
|
/***********************************************************************
|
|
* Wine specific - Win32
|
|
*/
|
|
typedef struct _WINE_ACMDRIVERID *PWINE_ACMDRIVERID;
|
|
typedef struct _WINE_ACMDRIVER *PWINE_ACMDRIVER;
|
|
|
|
#define WINE_ACMOBJ_DONTCARE 0x5EED0000
|
|
#define WINE_ACMOBJ_DRIVERID 0x5EED0001
|
|
#define WINE_ACMOBJ_DRIVER 0x5EED0002
|
|
#define WINE_ACMOBJ_STREAM 0x5EED0003
|
|
#define WINE_ACMOBJ_NOTIFYWND 0x5EED0004
|
|
#define WINE_ACMOBJ_LOCALDRIVER 0x5EED0005
|
|
|
|
typedef struct _WINE_ACMOBJ
|
|
{
|
|
DWORD dwType;
|
|
PWINE_ACMDRIVERID pACMDriverID;
|
|
} WINE_ACMOBJ, *PWINE_ACMOBJ;
|
|
|
|
typedef struct _WINE_ACMLOCALDRIVER * PWINE_ACMLOCALDRIVER;
|
|
typedef struct _WINE_ACMLOCALDRIVERINST * PWINE_ACMLOCALDRIVERINST;
|
|
typedef struct _WINE_ACMLOCALDRIVER
|
|
{
|
|
WINE_ACMOBJ obj;
|
|
HMODULE hModule;
|
|
DRIVERPROC lpDrvProc;
|
|
PWINE_ACMLOCALDRIVERINST pACMInstList;
|
|
PWINE_ACMLOCALDRIVER pNextACMLocalDrv;
|
|
PWINE_ACMLOCALDRIVER pPrevACMLocalDrv;
|
|
LONG ref;
|
|
} WINE_ACMLOCALDRIVER;
|
|
|
|
typedef struct _WINE_ACMLOCALDRIVERINST
|
|
{
|
|
PWINE_ACMLOCALDRIVER pLocalDriver;
|
|
DWORD dwDriverID;
|
|
BOOL bSession;
|
|
PWINE_ACMLOCALDRIVERINST pNextACMInst;
|
|
} WINE_ACMLOCALDRIVERINST;
|
|
|
|
typedef struct _WINE_ACMDRIVER
|
|
{
|
|
WINE_ACMOBJ obj;
|
|
HDRVR hDrvr;
|
|
PWINE_ACMLOCALDRIVERINST pLocalDrvrInst;
|
|
|
|
PWINE_ACMDRIVER pNextACMDriver;
|
|
} WINE_ACMDRIVER;
|
|
|
|
typedef struct _WINE_ACMSTREAM
|
|
{
|
|
WINE_ACMOBJ obj;
|
|
PWINE_ACMDRIVER pDrv;
|
|
ACMDRVSTREAMINSTANCE drvInst;
|
|
HACMDRIVER hAcmDriver;
|
|
} WINE_ACMSTREAM, *PWINE_ACMSTREAM;
|
|
|
|
typedef struct _WINE_ACMDRIVERID
|
|
{
|
|
WINE_ACMOBJ obj;
|
|
LPWSTR pszDriverAlias;
|
|
LPWSTR pszFileName;
|
|
PWINE_ACMLOCALDRIVER pLocalDriver; /* NULL if global */
|
|
PWINE_ACMDRIVER pACMDriverList;
|
|
PWINE_ACMDRIVERID pNextACMDriverID;
|
|
PWINE_ACMDRIVERID pPrevACMDriverID;
|
|
/* information about the driver itself, either gotten from registry or driver itself */
|
|
DWORD cFilterTags;
|
|
DWORD cFormatTags;
|
|
DWORD fdwSupport;
|
|
struct {
|
|
DWORD dwFormatTag;
|
|
DWORD cbwfx;
|
|
}* aFormatTag;
|
|
} WINE_ACMDRIVERID;
|
|
|
|
typedef struct _WINE_ACMNOTIFYWND * PWINE_ACMNOTIFYWND;
|
|
typedef struct _WINE_ACMNOTIFYWND
|
|
{
|
|
WINE_ACMOBJ obj;
|
|
HWND hNotifyWnd; /* Window to notify on ACM events: driver add, driver removal, priority change */
|
|
DWORD dwNotifyMsg; /* Notification message to send to window */
|
|
DWORD fdwSupport;
|
|
PWINE_ACMNOTIFYWND pNextACMNotifyWnd;
|
|
PWINE_ACMNOTIFYWND pPrevACMNotifyWnd;
|
|
} WINE_ACMNOTIFYWND;
|
|
|
|
/* From internal.c */
|
|
extern HANDLE MSACM_hHeap DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMDRIVERID MSACM_pFirstACMDriverID DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMDRIVERID MSACM_RegisterDriver(LPCWSTR pszDriverAlias, LPCWSTR pszFileName,
|
|
PWINE_ACMLOCALDRIVER pLocalDriver) DECLSPEC_HIDDEN;
|
|
extern void MSACM_RegisterAllDrivers(void) DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMDRIVERID MSACM_UnregisterDriver(PWINE_ACMDRIVERID p) DECLSPEC_HIDDEN;
|
|
extern void MSACM_UnregisterAllDrivers(void) DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMDRIVERID MSACM_GetDriverID(HACMDRIVERID hDriverID) DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMDRIVER MSACM_GetDriver(HACMDRIVER hDriver) DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMNOTIFYWND MSACM_GetNotifyWnd(HACMDRIVERID hDriver) DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMOBJ MSACM_GetObj(HACMOBJ hObj, DWORD type) DECLSPEC_HIDDEN;
|
|
|
|
extern MMRESULT MSACM_Message(HACMDRIVER, UINT, LPARAM, LPARAM) DECLSPEC_HIDDEN;
|
|
extern BOOL MSACM_FindFormatTagInCache(const WINE_ACMDRIVERID*, DWORD, LPDWORD) DECLSPEC_HIDDEN;
|
|
|
|
extern void MSACM_RePositionDriver(PWINE_ACMDRIVERID, DWORD) DECLSPEC_HIDDEN;
|
|
extern void MSACM_WriteCurrentPriorities(void) DECLSPEC_HIDDEN;
|
|
extern void MSACM_BroadcastNotification(void) DECLSPEC_HIDDEN;
|
|
extern void MSACM_DisableNotifications(void) DECLSPEC_HIDDEN;
|
|
extern void MSACM_EnableNotifications(void) DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMNOTIFYWND MSACM_RegisterNotificationWindow(HWND hNotifyWnd, DWORD dwNotifyMsg) DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMNOTIFYWND MSACM_UnRegisterNotificationWindow(const WINE_ACMNOTIFYWND*) DECLSPEC_HIDDEN;
|
|
|
|
extern PWINE_ACMDRIVERID MSACM_RegisterDriverFromRegistry(LPCWSTR pszRegEntry) DECLSPEC_HIDDEN;
|
|
|
|
extern PWINE_ACMLOCALDRIVER MSACM_RegisterLocalDriver(HMODULE hModule, DRIVERPROC lpDriverProc) DECLSPEC_HIDDEN;
|
|
extern PWINE_ACMLOCALDRIVERINST MSACM_OpenLocalDriver(PWINE_ACMLOCALDRIVER, LPARAM) DECLSPEC_HIDDEN;
|
|
extern LRESULT MSACM_CloseLocalDriver(PWINE_ACMLOCALDRIVERINST) DECLSPEC_HIDDEN;
|
|
/*
|
|
extern PWINE_ACMLOCALDRIVER MSACM_GetLocalDriver(HACMDRIVER hDriver);
|
|
*/
|
|
/* From msacm32.c */
|
|
extern HINSTANCE MSACM_hInstance32 DECLSPEC_HIDDEN;
|
|
|
|
/* From pcmcnvtr.c */
|
|
LRESULT CALLBACK PCM_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
|
|
LPARAM dwParam1, LPARAM dwParam2) DECLSPEC_HIDDEN;
|
|
|
|
/* Dialog box templates */
|
|
#include "msacmdlg.h"
|
|
|
|
#endif /* __WINE_WINEACM_H */
|