60#define DPLAYX_AcquireSemaphore() TRACE( "Waiting for DPLAYX semaphore\n" ); \
61 WaitForSingleObject( hDplayxSema, INFINITE );\
62 TRACE( "Through wait\n" )
64#define DPLAYX_ReleaseSemaphore() ReleaseSemaphore( hDplayxSema, 1, NULL ); \
65 TRACE( "DPLAYX Semaphore released\n" )
69#define dwStaticSharedSize (128 * 1024)
70#define dwDynamicSharedSize (512 * 1024)
71#define dwTotalSharedSize ( dwStaticSharedSize + dwDynamicSharedSize )
78#define dwBlockSize 512
79#define dwMaxBlock (dwDynamicSharedSize/dwBlockSize)
114 FIXME(
"Size exceeded. Request of 0x%08lx\n",
size );
130 ERR(
"No free block found\n" );
194 TRACE(
"Translated dwAppID == 0 into 0x%08lx\n", dwAppID );
202 TRACE(
"Found 0x%08lx @ %u\n", dwAppID,
i );
230 TRACE(
"Setting lobbyData[%u] for (0x%08lx,0x%08lx)\n",
246 ERR(
"No empty lobbies\n" );
283 BOOL bClearSetHandles )
295 if( lphStart !=
NULL )
305 if( bClearSetHandles )
312 if( lphDeath !=
NULL )
322 if( bClearSetHandles )
329 if( lphConnRead !=
NULL )
339 if( bClearSetHandles )
362 TRACE(
"DPLAYX dll loaded - construct called\n" );
368 s_attrib.
nLength =
sizeof(s_attrib);
378 bInitializeSharedMemory =
TRUE;
417 0, 0, 0, lpDesiredMemoryMapStart );
430 ERR(
": unable to map static data into process memory space (%ld)\n",
450 ERR(
"File mapped to %p (not %p). Expect failure\n",
463 if( bInitializeSharedMemory )
467 TRACE(
"Initializing shared memory\n" );
498 bSuccess =
SetEvent( hInformOnStart );
499 TRACE(
"Signalling lobby app start event %p %s\n",
500 hInformOnStart, bSuccess ?
"succeed" :
"failed" );
517 TRACE(
"DPLAYX dll unloaded - destruct called\n" );
525 bSuccess =
SetEvent( hInformOnDeath );
526 TRACE(
"Signalling lobby app death event %p %s\n",
527 hInformOnDeath, bSuccess ?
"succeed" :
"failed" );
549 BYTE* lpStartOfFreeSpace;
556 if(
src->lpSessionDesc )
560 *
dest->lpSessionDesc = *
src->lpSessionDesc;
563 if(
src->lpSessionDesc->lpszSessionNameA )
565 strcpy( (
LPSTR)lpStartOfFreeSpace,
src->lpSessionDesc->lpszSessionNameA );
566 dest->lpSessionDesc->lpszSessionNameA = (
LPSTR)lpStartOfFreeSpace;
567 lpStartOfFreeSpace +=
568 strlen(
dest->lpSessionDesc->lpszSessionNameA ) + 1;
571 if(
src->lpSessionDesc->lpszPasswordA )
573 strcpy( (
LPSTR)lpStartOfFreeSpace,
src->lpSessionDesc->lpszPasswordA );
574 dest->lpSessionDesc->lpszPasswordA = (
LPSTR)lpStartOfFreeSpace;
575 lpStartOfFreeSpace +=
576 strlen(
dest->lpSessionDesc->lpszPasswordA ) + 1;
581 if(
src->lpPlayerName )
584 lpStartOfFreeSpace +=
sizeof(
DPNAME );
585 *
dest->lpPlayerName = *
src->lpPlayerName;
587 if(
src->lpPlayerName->lpszShortNameA )
589 strcpy( (
LPSTR)lpStartOfFreeSpace,
src->lpPlayerName->lpszShortNameA );
590 dest->lpPlayerName->lpszShortNameA = (
LPSTR)lpStartOfFreeSpace;
591 lpStartOfFreeSpace +=
592 strlen(
dest->lpPlayerName->lpszShortNameA ) + 1;
595 if(
src->lpPlayerName->lpszLongNameA )
597 strcpy( (
LPSTR)lpStartOfFreeSpace,
src->lpPlayerName->lpszLongNameA );
598 dest->lpPlayerName->lpszLongNameA = (
LPSTR)lpStartOfFreeSpace;
599 lpStartOfFreeSpace +=
608 dest->lpAddress = lpStartOfFreeSpace;
617 BYTE* lpStartOfFreeSpace;
624 if(
src->lpSessionDesc )
628 *
dest->lpSessionDesc = *
src->lpSessionDesc;
631 if(
src->lpSessionDesc->lpszSessionName )
634 dest->lpSessionDesc->lpszSessionName = (
LPWSTR)lpStartOfFreeSpace;
635 lpStartOfFreeSpace +=
sizeof(
WCHAR) *
636 (
lstrlenW(
dest->lpSessionDesc->lpszSessionName ) + 1 );
639 if(
src->lpSessionDesc->lpszPassword )
642 dest->lpSessionDesc->lpszPassword = (
LPWSTR)lpStartOfFreeSpace;
643 lpStartOfFreeSpace +=
sizeof(
WCHAR) *
649 if(
src->lpPlayerName )
652 lpStartOfFreeSpace +=
sizeof(
DPNAME );
653 *
dest->lpPlayerName = *
src->lpPlayerName;
655 if(
src->lpPlayerName->lpszShortName )
658 dest->lpPlayerName->lpszShortName = (
LPWSTR)lpStartOfFreeSpace;
659 lpStartOfFreeSpace +=
sizeof(
WCHAR) *
663 if(
src->lpPlayerName->lpszLongName )
666 dest->lpPlayerName->lpszLongName = (
LPWSTR)lpStartOfFreeSpace;
667 lpStartOfFreeSpace +=
sizeof(
WCHAR) *
676 dest->lpAddress = lpStartOfFreeSpace;
690 ERR(
"lpConn is NULL\n" );
711 dwTotalSize +=
sizeof(
DPNAME );
737 ERR(
"lpConn is NULL\n" );
747 dwTotalSize +=
sizeof(
WCHAR ) *
753 dwTotalSize +=
sizeof(
WCHAR ) *
760 dwTotalSize +=
sizeof(
DPNAME );
764 dwTotalSize +=
sizeof(
WCHAR ) *
770 dwTotalSize +=
sizeof(
WCHAR ) *
787 DWORD dwRequiredDataSize = 0;
788 HANDLE hInformOnSettingRead;
796 TRACE(
"Application 0x%08lx is not lobbied\n", dwAppID );
805 if ( ( lpData ==
NULL ) ||
806 ( *lpdwDataSize < dwRequiredDataSize )
826 bSuccess =
SetEvent( hInformOnSettingRead );
827 TRACE(
"Signalling setting read event %p %s\n",
828 hInformOnSettingRead, bSuccess ?
"succeed" :
"failed" );
843 DWORD dwRequiredDataSize = 0;
844 HANDLE hInformOnSettingRead;
859 if ( ( lpData ==
NULL ) ||
860 ( *lpdwDataSize < dwRequiredDataSize )
880 bSuccess =
SetEvent( hInformOnSettingRead );
881 TRACE(
"Signalling setting read event %p %s\n",
882 hInformOnSettingRead, bSuccess ?
"succeed" :
"failed" );
905 ERR(
"invalid parameters.\n");
912 ERR(
": old/new DPLCONNECTION type? Size=%08lx\n", lpConn->
dwSize );
932 ERR(
"DPSESSIONDESC passed in? Size=%lu\n",
968 ERR(
"invalid parameters.\n");
975 ERR(
": old/new DPLCONNECTION type? Size=%lu\n", lpConn->
dwSize );
1034 (
lobbyData[
i ].bWaitForConnectionSettings )
1072 static char szTempStr[12];
1079 return "DPERR_ALREADYINITIALIZED";
1081 return "DPERR_ACCESSDENIED";
1083 return "DPERR_ACTIVEPLAYERS";
1085 return "DPERR_BUFFERTOOSMALL";
1087 return "DPERR_CANTADDPLAYER";
1089 return "DPERR_CANTCREATEGROUP";
1091 return "DPERR_CANTCREATEPLAYER";
1093 return "DPERR_CANTCREATESESSION";
1095 return "DPERR_CAPSNOTAVAILABLEYET";
1097 return "DPERR_EXCEPTION";
1099 return "DPERR_GENERIC";
1101 return "DPERR_INVALIDFLAGS";
1103 return "DPERR_INVALIDOBJECT";
1105 return "DPERR_INVALIDPARAMS";
1107 return "DPERR_INVALIDPLAYER";
1109 return "DPERR_INVALIDGROUP";
1111 return "DPERR_NOCAPS";
1113 return "DPERR_NOCONNECTION";
1115 return "DPERR_OUTOFMEMORY";
1117 return "DPERR_NOMESSAGES";
1119 return "DPERR_NONAMESERVERFOUND";
1121 return "DPERR_NOPLAYERS";
1123 return "DPERR_NOSESSIONS";
1125 return "DPERR_PENDING";
1127 return "DPERR_SENDTOOBIG";
1129 return "DPERR_TIMEOUT";
1131 return "DPERR_UNAVAILABLE";
1133 return "DPERR_UNSUPPORTED";
1135 return "DPERR_BUSY";
1137 return "DPERR_USERCANCEL";
1139 return "DPERR_NOINTERFACE";
1141 return "DPERR_CANNOTCREATESERVER";
1143 return "DPERR_PLAYERLOST";
1145 return "DPERR_SESSIONLOST";
1147 return "DPERR_UNINITIALIZED";
1149 return "DPERR_NONEWPLAYERS";
1151 return "DPERR_INVALIDPASSWORD";
1153 return "DPERR_CONNECTING";
1155 return "DPERR_CONNECTIONLOST";
1157 return "DPERR_UNKNOWNMESSAGE";
1159 return "DPERR_CANCELFAILED";
1161 return "DPERR_INVALIDPRIORITY";
1163 return "DPERR_NOTHANDLED";
1165 return "DPERR_CANCELLED";
1167 return "DPERR_ABORTED";
1169 return "DPERR_BUFFERTOOLARGE";
1171 return "DPERR_CANTCREATEPROCESS";
1173 return "DPERR_APPNOTSTARTED";
1175 return "DPERR_INVALIDINTERFACE";
1177 return "DPERR_NOSERVICEPROVIDER";
1179 return "DPERR_UNKNOWNAPPLICATION";
1181 return "DPERR_NOTLOBBIED";
1183 return "DPERR_SERVICEPROVIDERLOADED";
1185 return "DPERR_ALREADYREGISTERED";
1187 return "DPERR_NOTREGISTERED";
1189 return "DPERR_AUTHENTICATIONFAILED";
1191 return "DPERR_CANTLOADSSPI";
1193 return "DPERR_ENCRYPTIONFAILED";
1195 return "DPERR_SIGNFAILED";
1197 return "DPERR_CANTLOADSECURITYPACKAGE";
1199 return "DPERR_ENCRYPTIONNOTSUPPORTED";
1201 return "DPERR_CANTLOADCAPI";
1203 return "DPERR_NOTLOGGEDIN";
1205 return "DPERR_LOGONDENIED";
1209 WARN(
"Unknown error 0x%08lx\n",
hr );
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define ERROR_INVALID_ADDRESS
#define INVALID_HANDLE_VALUE
_ACRTIMP size_t __cdecl strlen(const char *)
#define DPERR_INVALIDOBJECT
#define DPERR_ACCESSDENIED
#define DPERR_UNKNOWNAPPLICATION
#define DPERR_NOTLOGGEDIN
#define DPERR_LOGONDENIED
#define DPERR_NOTREGISTERED
#define DPERR_CANTADDPLAYER
#define DPERR_NOSERVICEPROVIDER
#define DPERR_BUFFERTOOLARGE
#define DPERR_SESSIONLOST
#define DPERR_NONEWPLAYERS
#define DPERR_UNINITIALIZED
#define DPERR_CANTCREATEPLAYER
#define DPERR_ALREADYREGISTERED
#define DPERR_INVALIDGROUP
struct tagDPNAME * LPDPNAME
#define DPERR_AUTHENTICATIONFAILED
#define DPERR_ENCRYPTIONFAILED
#define DPERR_INVALIDINTERFACE
#define DPERR_NOINTERFACE
#define DPERR_CANNOTCREATESERVER
#define DPERR_CANTLOADCAPI
#define DPERR_ENCRYPTIONNOTSUPPORTED
#define DPERR_CAPSNOTAVAILABLEYET
#define DPERR_CONNECTIONLOST
#define DPERR_BUFFERTOOSMALL
#define DPERR_ALREADYINITIALIZED
#define DPERR_INVALIDFLAGS
#define DPERR_CANTLOADSSPI
#define DPERR_SERVICEPROVIDERLOADED
#define DPERR_UNSUPPORTED
#define DPERR_UNKNOWNMESSAGE
#define DPERR_CANTCREATEGROUP
#define DPERR_UNAVAILABLE
#define DPERR_NONAMESERVERFOUND
#define DPERR_CANCELFAILED
#define DPERR_APPNOTSTARTED
#define DPERR_INVALIDPLAYER
#define DPERR_NOCONNECTION
#define DPERR_INVALIDPARAMS
#define DPERR_INVALIDPASSWORD
#define DPERR_ACTIVEPLAYERS
struct tagDPLCONNECTION DPLCONNECTION
#define DPERR_OUTOFMEMORY
#define DPERR_CANTCREATEPROCESS
struct tagDPSESSIONDESC2 * LPDPSESSIONDESC2
#define DPERR_INVALIDPRIORITY
#define DPERR_CANTCREATESESSION
struct tagDPSESSIONDESC2 DPSESSIONDESC2
#define DPERR_CANTLOADSECURITYPACKAGE
static BOOL DPLAYX_IsAppIdLobbied(DWORD dwAppID, LPDPLAYX_LOBBYDATA *lplpDplData)
static const char lpszDplayxSemaName[]
static BOOL DPLAYX_GetThisLobbyHandles(LPHANDLE lphStart, LPHANDLE lphDeath, LPHANDLE lphConnRead, BOOL bClearSetHandles)
HRESULT DPLAYX_GetConnectionSettingsA(DWORD dwAppID, LPVOID lpData, LPDWORD lpdwDataSize)
static DPSESSIONDESC2 * sessionData
BOOL DPLAYX_SetLobbyHandles(DWORD dwAppID, HANDLE hStart, HANDLE hDeath, HANDLE hConnRead)
#define dwDynamicSharedSize
static DPLAYX_MEM_SLICE * lpMemArea
#define dwTotalSharedSize
static void DPLAYX_InitializeLobbyDataEntry(LPDPLAYX_LOBBYDATA lpData)
static DWORD DPLAYX_SizeOfLobbyDataA(const DPLCONNECTION *lpConn)
static const char lpszDplayxFileMapping[]
BOOL DPLAYX_AnyLobbiesWaitingForConnSettings(void)
static void DPLAYX_PrivHeapFree(LPVOID addr)
static void DPLAYX_CopyConnStructA(LPDPLCONNECTION dest, const DPLCONNECTION *src)
HRESULT DPLAYX_SetConnectionSettingsA(DWORD dwFlags, DWORD dwAppID, const DPLCONNECTION *lpConn)
#define DPLAYX_ReleaseSemaphore()
static LPVOID lpSharedStaticData
static DWORD DPLAYX_SizeOfLobbyDataW(const DPLCONNECTION *lpConn)
BOOL DPLAYX_SetLobbyMsgThreadId(DWORD dwAppId, DWORD dwThreadId)
BOOL DPLAYX_CreateLobbyApplication(DWORD dwAppID)
BOOL DPLAYX_WaitForConnectionSettings(BOOL bWait)
static LPVOID DPLAYX_PrivHeapAlloc(DWORD flags, DWORD size)
HRESULT DPLAYX_SetConnectionSettingsW(DWORD dwFlags, DWORD dwAppID, const DPLCONNECTION *lpConn)
LPCSTR DPLAYX_HresultToString(HRESULT hr)
static HANDLE hDplayxSharedMem
BOOL DPLAYX_DestructData(void)
struct tagDPLAYX_LOBBYDATA DPLAYX_LOBBYDATA
struct tagDPLAYX_LOBBYDATA * LPDPLAYX_LOBBYDATA
static DPLAYX_LOBBYDATA * lobbyData
HRESULT DPLAYX_GetConnectionSettingsW(DWORD dwAppID, LPVOID lpData, LPDWORD lpdwDataSize)
static HANDLE hDplayxSema
static void DPLAYX_CopyConnStructW(LPDPLCONNECTION dest, const DPLCONNECTION *src)
#define DPLAYX_AcquireSemaphore()
#define dwStaticSharedSize
BOOL DPLAYX_ConstructData(void)
LPVOID NTAPI MapViewOfFileEx(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap, LPVOID lpBaseAddress)
BOOL NTAPI FlushViewOfFile(IN LPCVOID lpBaseAddress, IN SIZE_T dwNumberOfBytesToFlush)
HANDLE NTAPI CreateFileMappingA(IN HANDLE hFile, IN LPSECURITY_ATTRIBUTES lpFileMappingAttributes, IN DWORD flProtect, IN DWORD dwMaximumSizeHigh, IN DWORD dwMaximumSizeLow, IN LPCSTR lpName)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define ERROR_ALREADY_EXISTS
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
int WINAPIV wsprintfA(_Out_ LPSTR, _In_ _Printf_format_string_ LPCSTR,...)
BYTE data[dwBlockSize - sizeof(BOOL)]
LPVOID lpSecurityDescriptor
BOOL bWaitForConnectionSettings
DWORD dwAppLaunchedFromID
HANDLE hInformOnSettingRead
LPDPSESSIONDESC2 lpSessionDesc
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreA(IN LPSECURITY_ATTRIBUTES lpSemaphoreAttributes OPTIONAL, IN LONG lInitialCount, IN LONG lMaximumCount, IN LPCSTR lpName OPTIONAL)
#define CONTAINING_RECORD(address, type, field)
DWORD WINAPI GetLastError(void)
DWORD WINAPI GetCurrentProcessId(void)