NT4/private/windows/media/winmm/clinit.c
2020-09-30 17:12:29 +02:00

100 lines
2.9 KiB
C

/****************************** Module Header ******************************\
* Module Name: clinit.c
*
* Copyright (c) 1985-91, Microsoft Corporation
*
* This module contains all the client/server init code for MMSNDSRVL.
*
* History:
* 1 May 92 SteveDav Pinched from USER
\***************************************************************************/
#ifndef DOSWIN32
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <ntcsrdll.h>
#include "winmmi.h"
#include "mci.h"
#include <mmsndcs.h>
#include <winss.h>
#include <ntcsrmsg.h>
#endif
/***************************************************************************\
* ServerInit
*
* When WINMM is loaded by an EXE (either at EXE load or at LoadModule
* time) this routine is called by the loader. Its purpose is to initialize
* everything that will be needed for future API calls by the app.
*
* History:
* 1 May 92 SteveDav Pinched from USER
\***************************************************************************/
UINT fServer; // Server Process id
BOOL ServerInit(VOID)
{
#ifndef DOSWIN32
NTSTATUS status = 0;
MMSNDCONNECT sndconnect;
CSR_CALLBACK_INFO cbiCallBack;
ULONG ulConnect = sizeof(MMSNDCONNECT);
sndconnect.ulVersion = MMSNDCURRENTVERSION;
sndconnect.hFileMapping = 0;
cbiCallBack.ApiNumberBase = 0;
cbiCallBack.MaxApiNumber = 0;
cbiCallBack.CallbackDispatchTable = 0;
dprintf3((" BEFORE %8x >> hFileMapping",sndconnect.hFileMapping));
dprintf4((" %8x >> hEvent",sndconnect.hEvent));
dprintf4((" %8x >> hMutex",sndconnect.hMutex));
status = CsrClientConnectToServer(WINSS_OBJECT_DIRECTORY_NAME,
MMSNDSRV_SERVERDLL_INDEX, &cbiCallBack, &sndconnect,
&ulConnect, (PBOOLEAN)&fServer);
if (!NT_SUCCESS(status)) {
dprintf2(("could not connect to sound server, status is %8x", status));
return FALSE;
}
dprintf3(("AFTER %8x = version, status is %x",sndconnect.ulCurrentVersion, status));
dprintf3((" %8x >> hFileMapping",sndconnect.hFileMapping));
dprintf4((" %8x >> hEvent",sndconnect.hEvent));
dprintf4((" %8x >> hMutex",sndconnect.hMutex));
if (sndconnect.hFileMapping) {
base = MapViewOfFile( sndconnect.hFileMapping, FILE_MAP_ALL_ACCESS,
0, 0, 0); // from beginning for total length
if (!base) {
DWORD n;
n = GetLastError();
dprintf1(("Error %d mapping file view with server handle %x", n, sndconnect.hFileMapping));
} else {
dprintf2(("Address %x mapping file view with server handle", base));
hEvent = sndconnect.hEvent;
hMutex = sndconnect.hMutex;
hFileMapping = sndconnect.hFileMapping;
tidNotify = base->dwGlobalThreadId;
}
} else {
dprintf1(("Server did not return a valid file mapping handle"));
}
#endif
return TRUE;
}