/*++ Copyright (c) 2001 Microsoft Corporation Module Name: kmode.c Abstract: This module contains code to cause KMode NPx accesses Author: Environment: User mode only. Revision History: --*/ #include "pch.h" VOID KModeTouchNpx( VOID ) { BOOLEAN bSuccess; bSuccess = KModeTouchNpxViaDSound(); if (bSuccess == FALSE) { exit(1); } } BOOLEAN KModeTouchNpxViaDSound( VOID ) { LPDIRECTSOUND ds; LPDIRECTSOUNDBUFFER dsc; DSBUFFERDESC dsbc; WAVEFORMATEX wfx; HRESULT hr; BYTE x[1024]; PBYTE y; int i; ZeroMemory(&wfx, sizeof(wfx)); wfx.wFormatTag = WAVE_FORMAT_PCM; wfx.nBlockAlign = 4; wfx.wBitsPerSample = 4; wfx.nSamplesPerSec = 44100; wfx.nAvgBytesPerSec = 44100 * 4; wfx.nChannels = 2; wfx.cbSize = 0; ds = NULL; dsc = NULL; memcpy(x, &wfx, sizeof(wfx)); y = x + sizeof(wfx); for(i=0; i<200; i++) { *y = (BYTE) i; y++; } hr = DirectSoundCreate(NULL, &ds, NULL); if (ds == NULL) { fprintf(stderr, "DirectSoundCreate failed?!\n"); return FALSE; } hr = ds->lpVtbl->SetCooperativeLevel(ds, GetDesktopWindow(), DSSCL_NORMAL); ZeroMemory(&dsbc, sizeof(dsbc)); dsbc.dwBufferBytes = 10000; dsbc.dwFlags = 0; dsbc.dwSize = sizeof(dsbc); dsbc.lpwfxFormat = (LPWAVEFORMATEX) x; hr = ds->lpVtbl->CreateSoundBuffer(ds, &dsbc, &dsc, NULL); if (dsc) { hr = dsc->lpVtbl->Play(dsc, 0, 0, 0); dsc->lpVtbl->Release(dsc); } if (ds) { ds->lpVtbl->Release(ds); } return TRUE; }