+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (dwReserved1 != 0 || !(dwFlags & DSBPLAY_LOOPING))
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ PrimaryDirectSoundBuffer_AcquireLock(iface);
+
+ if (This->State == KSSTATE_STOP)
+ {
+ PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_ACQUIRE);
+ ASSERT(This->State == KSSTATE_ACQUIRE);
+ }
+
+ if (This->State == KSSTATE_ACQUIRE)
+ {
+ PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_PAUSE);
+ ASSERT(This->State == KSSTATE_PAUSE);
+ }
+
+ if (This->State == KSSTATE_PAUSE)
+ {
+ PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_RUN);
+ ASSERT(This->State == KSSTATE_RUN);
+ }
+
+ PrimaryDirectSoundBuffer_ReleaseLock(iface);
+
+ return DS_OK;