2005-01-06 13:58:04 +00:00
|
|
|
/* $Id$
|
1999-08-29 06:59:11 +00:00
|
|
|
*
|
2006-05-25 19:50:19 +00:00
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS system libraries
|
|
|
|
* FILE: dll/win32/kernel32/misc/error.c
|
|
|
|
* PURPOSE: Environment functions
|
|
|
|
* PROGRAMMER: Emanuele Aliberti
|
|
|
|
* Thomas Weidenmueller
|
|
|
|
* UPDATE HISTORY:
|
|
|
|
* Created 05/10/98
|
1999-08-29 06:59:11 +00:00
|
|
|
*/
|
1998-10-05 04:00:59 +00:00
|
|
|
|
2006-05-25 19:50:19 +00:00
|
|
|
|
2003-01-15 21:24:36 +00:00
|
|
|
#include <k32.h>
|
|
|
|
|
|
|
|
#define NDEBUG
|
2007-09-02 19:42:22 +00:00
|
|
|
#include <debug.h>
|
1999-04-16 17:26:10 +00:00
|
|
|
|
|
|
|
|
2003-07-10 18:50:51 +00:00
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2004-01-23 17:18:16 +00:00
|
|
|
BOOL
|
2008-11-30 11:42:05 +00:00
|
|
|
WINAPI
|
1999-03-10 05:16:57 +00:00
|
|
|
Beep (DWORD dwFreq, DWORD dwDuration)
|
|
|
|
{
|
|
|
|
HANDLE hBeep;
|
2005-10-27 20:00:27 +00:00
|
|
|
UNICODE_STRING BeepDevice;
|
|
|
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
|
|
|
IO_STATUS_BLOCK IoStatusBlock;
|
1999-03-10 05:16:57 +00:00
|
|
|
BEEP_SET_PARAMETERS BeepSetParameters;
|
2005-10-27 20:00:27 +00:00
|
|
|
NTSTATUS Status;
|
|
|
|
|
|
|
|
/* check the parameters */
|
|
|
|
if ((dwFreq >= 0x25 && dwFreq <= 0x7FFF) ||
|
|
|
|
(dwFreq == 0x0 && dwDuration == 0x0))
|
|
|
|
{
|
|
|
|
/* open the device */
|
|
|
|
RtlInitUnicodeString(&BeepDevice,
|
|
|
|
L"\\Device\\Beep");
|
|
|
|
|
|
|
|
InitializeObjectAttributes(&ObjectAttributes,
|
|
|
|
&BeepDevice,
|
|
|
|
0,
|
|
|
|
NULL,
|
|
|
|
NULL);
|
1999-03-10 05:16:57 +00:00
|
|
|
|
2005-10-27 20:00:27 +00:00
|
|
|
Status = NtCreateFile(&hBeep,
|
|
|
|
FILE_READ_DATA | FILE_WRITE_DATA,
|
|
|
|
&ObjectAttributes,
|
|
|
|
&IoStatusBlock,
|
|
|
|
NULL,
|
|
|
|
0,
|
|
|
|
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
|
|
|
FILE_OPEN_IF,
|
|
|
|
0,
|
|
|
|
NULL,
|
|
|
|
0);
|
|
|
|
if (NT_SUCCESS(Status))
|
|
|
|
{
|
|
|
|
/* Set beep data */
|
|
|
|
BeepSetParameters.Frequency = dwFreq;
|
|
|
|
BeepSetParameters.Duration = dwDuration;
|
1999-03-10 05:16:57 +00:00
|
|
|
|
2005-10-27 20:00:27 +00:00
|
|
|
Status = NtDeviceIoControlFile(hBeep,
|
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
&IoStatusBlock,
|
|
|
|
IOCTL_BEEP_SET,
|
|
|
|
&BeepSetParameters,
|
|
|
|
sizeof(BEEP_SET_PARAMETERS),
|
|
|
|
NULL,
|
|
|
|
0);
|
1999-03-10 05:16:57 +00:00
|
|
|
|
2005-10-27 20:00:27 +00:00
|
|
|
/* do an alertable wait if necessary */
|
|
|
|
if (NT_SUCCESS(Status) &&
|
2009-09-27 20:07:43 +00:00
|
|
|
(dwFreq != 0x0 || dwDuration != 0x0) && dwDuration != MAXDWORD)
|
2005-10-27 20:00:27 +00:00
|
|
|
{
|
|
|
|
SleepEx(dwDuration,
|
|
|
|
TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
NtClose(hBeep);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
Status = STATUS_INVALID_PARAMETER;
|
|
|
|
|
|
|
|
if (!NT_SUCCESS(Status))
|
|
|
|
{
|
|
|
|
SetLastErrorByStatus (Status);
|
|
|
|
return FALSE;
|
|
|
|
}
|
1999-03-10 05:16:57 +00:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1999-08-29 06:59:11 +00:00
|
|
|
/* EOF */
|