Merge to trunk head (r46631)

svn path=/branches/reactos-yarotows/; revision=46633
This commit is contained in:
Timo Kreuzer 2010-04-01 02:52:00 +00:00
commit 49d7aed889
286 changed files with 48255 additions and 8326 deletions

View file

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd"> <!DOCTYPE project SYSTEM "tools/rbuild/project.dtd">
<project name="ReactOS" makefile="makefile-amd64.auto" xmlns:xi="http://www.w3.org/2001/XInclude"> <project name="ReactOS" makefile="makefile-amd64.auto" xmlns:xi="http://www.w3.org/2001/XInclude" allowwarnings="true">
<xi:include href="config-amd64.rbuild"> <xi:include href="config-amd64.rbuild">
<xi:fallback> <xi:fallback>
<xi:include href="config-amd64.template.rbuild" /> <xi:include href="config-amd64.template.rbuild" />
@ -28,12 +28,14 @@
<compilerflag>-ftracer</compilerflag> <compilerflag>-ftracer</compilerflag>
<compilerflag>-momit-leaf-frame-pointer</compilerflag> <compilerflag>-momit-leaf-frame-pointer</compilerflag>
</if> </if>
<compilerflag>-fms-extensions</compilerflag>
<compilerflag>-mpreferred-stack-boundary=4</compilerflag> <compilerflag>-mpreferred-stack-boundary=4</compilerflag>
<compilerflag compiler="midl">-m64 --win64</compilerflag> <compilerflag compiler="midl">-m64 --win64</compilerflag>
<!-- compilerflag compiler="cc,cxx">-gstabs+</compilerflag --> <!-- compilerflag compiler="cc,cxx">-gstabs+</compilerflag -->
<!-- compilerflag compiler="as">-gstabs+</compilerflag --> <!-- compilerflag compiler="as">-gstabs+</compilerflag -->
<compilerflag>-U_X86_</compilerflag> <compilerflag>-U_X86_</compilerflag>
<compilerflag>-Wno-format</compilerflag> <compilerflag>-Wno-format</compilerflag>
<compilerflag>-fno-leading-underscore</compilerflag>
</group> </group>
<group linkerset="ld"> <group linkerset="ld">

View file

@ -9,9 +9,12 @@
#define strcasecmp _stricmp #define strcasecmp _stricmp
#define strncasecmp _strnicmp #define strncasecmp _strnicmp
#ifndef _TIMEZONE_DEFINED /* also in sys/time.h */
#define _TIMEZONE_DEFINED
struct timezone { struct timezone {
int tz_minuteswest; /* minutes W of Greenwich */ int tz_minuteswest;
int tz_dsttime; /* type of dst correction */ int tz_dsttime;
}; };
int gettimeofday(struct timeval *tv, struct timezone *tz); extern int __cdecl gettimeofday (struct timeval *p, struct timezone *z);
#endif

View file

@ -4,19 +4,9 @@
<include base="ftp">.</include> <include base="ftp">.</include>
<define name="lint" /> <define name="lint" />
<!-- FIXME: workarounds until we have a proper oldnames library -->
<define name="chdir">_chdir</define>
<define name="getcwd">_getcwd</define>
<define name="mktemp">_mktemp</define>
<define name="unlink">_unlink</define>
<define name="close">_close</define>
<define name="fileno">_fileno</define>
<define name="read">_read</define>
<define name="write">_write</define>
<define name="lseek">_lseek</define>
<library>ws2_32</library> <library>ws2_32</library>
<library>iphlpapi</library> <library>iphlpapi</library>
<library>oldnames</library>
<file>cmds.c</file> <file>cmds.c</file>
<file>cmdtab.c</file> <file>cmdtab.c</file>
<file>domacro.c</file> <file>domacro.c</file>

View file

@ -4,16 +4,11 @@
<include base="dhcp">.</include> <include base="dhcp">.</include>
<include base="dhcp">include</include> <include base="dhcp">include</include>
<!-- FIXME: workarounds until we have a proper oldnames library -->
<define name="tzset">_tzset</define>
<define name="close">_close</define>
<define name="read">_read</define>
<define name="write">_write</define>
<library>ntdll</library> <library>ntdll</library>
<library>ws2_32</library> <library>ws2_32</library>
<library>iphlpapi</library> <library>iphlpapi</library>
<library>advapi32</library> <library>advapi32</library>
<library>oldnames</library>
<file>adapter.c</file> <file>adapter.c</file>
<file>alloc.c</file> <file>alloc.c</file>
<file>api.c</file> <file>api.c</file>

View file

@ -24,6 +24,7 @@
<property name="BASEADDRESS_PSTOREC" value="0x513d0000" /> <property name="BASEADDRESS_PSTOREC" value="0x513d0000" />
<property name="BASEADDRESS_LPK" value="0x516c0000" /> <property name="BASEADDRESS_LPK" value="0x516c0000" />
<property name="BASEADDRESS_MSGSM32ACM" value="0x56db0000" /> <property name="BASEADDRESS_MSGSM32ACM" value="0x56db0000" />
<property name="BASEADDRESS_MSDVBNP" value="0x58280000" />
<property name="BASEADDRESS_MSG711ACM" value="0x584f0000" /> <property name="BASEADDRESS_MSG711ACM" value="0x584f0000" />
<property name="BASEADDRESS_IMAADP32ACM" value="0x585e0000" /> <property name="BASEADDRESS_IMAADP32ACM" value="0x585e0000" />
<property name="BASEADDRESS_BDAPLGIN" value="0x58600000" /> <property name="BASEADDRESS_BDAPLGIN" value="0x58600000" />
@ -32,6 +33,7 @@
<property name="BASEADDRESS_MMSYS" value="0x588a0000" /> <property name="BASEADDRESS_MMSYS" value="0x588a0000" />
<property name="BASEADDRESS_JOY" value="0x589b0000" /> <property name="BASEADDRESS_JOY" value="0x589b0000" />
<property name="BASEADDRESS_QMGR" value="0x59620000" /> <property name="BASEADDRESS_QMGR" value="0x59620000" />
<property name="BASEADDRESS_MSVIDCTL" value="0x59660000" />
<property name="BASEADDRESS_UXTHEME" value="0x5ad70000" /> <property name="BASEADDRESS_UXTHEME" value="0x5ad70000" />
<property name="BASEADDRESS_VDMDBG" value="0x5b0d0000" /> <property name="BASEADDRESS_VDMDBG" value="0x5b0d0000" />
<property name="BASEADDRESS_UNTFS" value="0x5b340000" /> <property name="BASEADDRESS_UNTFS" value="0x5b340000" />

View file

@ -151,6 +151,7 @@ dll\cpl\timedate\timedate.cpl 1
;dll\cpl\usrmgr\usrmgr.cpl 1 ;dll\cpl\usrmgr\usrmgr.cpl 1
dll\directx\amstream\amstream.dll 1 dll\directx\amstream\amstream.dll 1
dll\directx\bdaplgin\bdaplgin.ax 1
dll\directx\dinput\dinput.dll 1 dll\directx\dinput\dinput.dll 1
dll\directx\dinput8\dinput8.dll 1 dll\directx\dinput8\dinput8.dll 1
dll\directx\dmusic\dmusic.dll 1 dll\directx\dmusic\dmusic.dll 1
@ -164,6 +165,8 @@ dll\directx\devenum\devenum.dll 1
dll\directx\ksproxy\ksproxy.ax 1 dll\directx\ksproxy\ksproxy.ax 1
dll\directx\ksuser\ksuser.dll 1 dll\directx\ksuser\ksuser.dll 1
dll\directx\msdmo\msdmo.dll 1 dll\directx\msdmo\msdmo.dll 1
dll\directx\msdvbnp\msdvbnp.ax 1
dll\directx\msvidctl\msvidctl.dll 1
dll\directx\quartz\quartz.dll 1 dll\directx\quartz\quartz.dll 1
dll\directx\qedit\qedit.dll 1 dll\directx\qedit\qedit.dll 1
dll\directx\wine\d3d8\d3d8.dll 1 dll\directx\wine\d3d8\d3d8.dll 1
@ -502,6 +505,7 @@ drivers\input\mouclass\mouclass.sys 2
drivers\input\sermouse\sermouse.sys 2 drivers\input\sermouse\sermouse.sys 2
drivers\ksfilter\ks\ks.sys 2 drivers\ksfilter\ks\ks.sys 2
drivers\multimedia\bdasup\bdasup.sys 2
drivers\network\afd\afd.sys 2 drivers\network\afd\afd.sys 2
drivers\network\ndis\ndis.sys 2 drivers\network\ndis\ndis.sys 2

View file

@ -385,7 +385,7 @@ SpiCreatePortConfig(
} }
VOID VOID
DDKCDECLAPI __cdecl
ScsiDebugPrint( ScsiDebugPrint(
IN ULONG DebugPrintLevel, IN ULONG DebugPrintLevel,
IN PCCHAR DebugMessage, IN PCCHAR DebugMessage,
@ -421,7 +421,7 @@ ScsiDebugPrint(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortCompleteRequest( ScsiPortCompleteRequest(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -435,7 +435,7 @@ ScsiPortCompleteRequest(
#undef ScsiPortConvertPhysicalAddressToUlong #undef ScsiPortConvertPhysicalAddressToUlong
ULONG ULONG
DDKAPI NTAPI
ScsiPortConvertPhysicalAddressToUlong( ScsiPortConvertPhysicalAddressToUlong(
IN SCSI_PHYSICAL_ADDRESS Address) IN SCSI_PHYSICAL_ADDRESS Address)
{ {
@ -443,7 +443,7 @@ ScsiPortConvertPhysicalAddressToUlong(
} }
SCSI_PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS
DDKAPI NTAPI
ScsiPortConvertUlongToPhysicalAddress( ScsiPortConvertUlongToPhysicalAddress(
IN ULONG UlongAddress) IN ULONG UlongAddress)
{ {
@ -451,7 +451,7 @@ ScsiPortConvertUlongToPhysicalAddress(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortFlushDma( ScsiPortFlushDma(
IN PVOID DeviceExtension) IN PVOID DeviceExtension)
{ {
@ -460,7 +460,7 @@ ScsiPortFlushDma(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortFreeDeviceBase( ScsiPortFreeDeviceBase(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID MappedAddress) IN PVOID MappedAddress)
@ -469,7 +469,7 @@ ScsiPortFreeDeviceBase(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortGetBusData( ScsiPortGetBusData(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG BusDataType, IN ULONG BusDataType,
@ -482,7 +482,7 @@ ScsiPortGetBusData(
} }
PVOID PVOID
DDKAPI NTAPI
ScsiPortGetDeviceBase( ScsiPortGetDeviceBase(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType, IN INTERFACE_TYPE BusType,
@ -514,7 +514,7 @@ ScsiPortGetDeviceBase(
} }
PVOID PVOID
DDKAPI NTAPI
ScsiPortGetLogicalUnit( ScsiPortGetLogicalUnit(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -527,7 +527,7 @@ ScsiPortGetLogicalUnit(
} }
SCSI_PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS
DDKAPI NTAPI
ScsiPortGetPhysicalAddress( ScsiPortGetPhysicalAddress(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
@ -564,7 +564,7 @@ ScsiPortGetPhysicalAddress(
} }
PSCSI_REQUEST_BLOCK PSCSI_REQUEST_BLOCK
DDKAPI NTAPI
ScsiPortGetSrb( ScsiPortGetSrb(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -641,7 +641,7 @@ SpiAllocateCommonBuffer(
} }
PVOID PVOID
DDKAPI NTAPI
ScsiPortGetUncachedExtension( ScsiPortGetUncachedExtension(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
@ -726,7 +726,7 @@ ScsiPortGetUncachedExtension(
} }
PVOID PVOID
DDKAPI NTAPI
ScsiPortGetVirtualAddress( ScsiPortGetVirtualAddress(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN SCSI_PHYSICAL_ADDRESS PhysicalAddress) IN SCSI_PHYSICAL_ADDRESS PhysicalAddress)
@ -1031,7 +1031,7 @@ SpiGetPciConfigData(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortInitialize( ScsiPortInitialize(
IN PVOID Argument1, IN PVOID Argument1,
IN PVOID Argument2, IN PVOID Argument2,
@ -1186,7 +1186,7 @@ ScsiPortInitialize(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortIoMapTransfer( ScsiPortIoMapTransfer(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb, IN PSCSI_REQUEST_BLOCK Srb,
@ -1198,7 +1198,7 @@ ScsiPortIoMapTransfer(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortLogError( ScsiPortLogError(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
@ -1213,7 +1213,7 @@ ScsiPortLogError(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortMoveMemory( ScsiPortMoveMemory(
IN PVOID WriteBuffer, IN PVOID WriteBuffer,
IN PVOID ReadBuffer, IN PVOID ReadBuffer,
@ -1223,7 +1223,7 @@ ScsiPortMoveMemory(
} }
VOID VOID
DDKCDECLAPI __cdecl
ScsiPortNotification( ScsiPortNotification(
IN SCSI_NOTIFICATION_TYPE NotificationType, IN SCSI_NOTIFICATION_TYPE NotificationType,
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
@ -1259,7 +1259,7 @@ ScsiPortNotification(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadPortBufferUchar( ScsiPortReadPortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
OUT PUCHAR Buffer, OUT PUCHAR Buffer,
@ -1269,7 +1269,7 @@ ScsiPortReadPortBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadPortBufferUlong( ScsiPortReadPortBufferUlong(
IN PULONG Port, IN PULONG Port,
OUT PULONG Buffer, OUT PULONG Buffer,
@ -1279,7 +1279,7 @@ ScsiPortReadPortBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadPortBufferUshort( ScsiPortReadPortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
OUT PUSHORT Buffer, OUT PUSHORT Buffer,
@ -1289,7 +1289,7 @@ ScsiPortReadPortBufferUshort(
} }
UCHAR UCHAR
DDKAPI NTAPI
ScsiPortReadPortUchar( ScsiPortReadPortUchar(
IN PUCHAR Port) IN PUCHAR Port)
{ {
@ -1300,7 +1300,7 @@ ScsiPortReadPortUchar(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortReadPortUlong( ScsiPortReadPortUlong(
IN PULONG Port) IN PULONG Port)
{ {
@ -1308,7 +1308,7 @@ ScsiPortReadPortUlong(
} }
USHORT USHORT
DDKAPI NTAPI
ScsiPortReadPortUshort( ScsiPortReadPortUshort(
IN PUSHORT Port) IN PUSHORT Port)
{ {
@ -1316,7 +1316,7 @@ ScsiPortReadPortUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadRegisterBufferUchar( ScsiPortReadRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -1327,7 +1327,7 @@ ScsiPortReadRegisterBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadRegisterBufferUlong( ScsiPortReadRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -1338,7 +1338,7 @@ ScsiPortReadRegisterBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadRegisterBufferUshort( ScsiPortReadRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -1349,7 +1349,7 @@ ScsiPortReadRegisterBufferUshort(
} }
UCHAR UCHAR
DDKAPI NTAPI
ScsiPortReadRegisterUchar( ScsiPortReadRegisterUchar(
IN PUCHAR Register) IN PUCHAR Register)
{ {
@ -1357,7 +1357,7 @@ ScsiPortReadRegisterUchar(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortReadRegisterUlong( ScsiPortReadRegisterUlong(
IN PULONG Register) IN PULONG Register)
{ {
@ -1365,7 +1365,7 @@ ScsiPortReadRegisterUlong(
} }
USHORT USHORT
DDKAPI NTAPI
ScsiPortReadRegisterUshort( ScsiPortReadRegisterUshort(
IN PUSHORT Register) IN PUSHORT Register)
{ {
@ -1373,7 +1373,7 @@ ScsiPortReadRegisterUshort(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortSetBusDataByOffset( ScsiPortSetBusDataByOffset(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG BusDataType, IN ULONG BusDataType,
@ -1389,7 +1389,7 @@ ScsiPortSetBusDataByOffset(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortStallExecution( ScsiPortStallExecution(
IN ULONG Delay) IN ULONG Delay)
{ {
@ -1397,7 +1397,7 @@ ScsiPortStallExecution(
} }
BOOLEAN BOOLEAN
DDKAPI NTAPI
ScsiPortValidateRange( ScsiPortValidateRange(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType, IN INTERFACE_TYPE BusType,
@ -1417,7 +1417,7 @@ ScsiPortValidateRange(
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortBufferUchar( ScsiPortWritePortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -1427,7 +1427,7 @@ ScsiPortWritePortBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortBufferUlong( ScsiPortWritePortBufferUlong(
IN PULONG Port, IN PULONG Port,
IN PULONG Buffer, IN PULONG Buffer,
@ -1437,7 +1437,7 @@ ScsiPortWritePortBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortBufferUshort( ScsiPortWritePortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -1447,7 +1447,7 @@ ScsiPortWritePortBufferUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortUchar( ScsiPortWritePortUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN UCHAR Value) IN UCHAR Value)
@ -1456,7 +1456,7 @@ ScsiPortWritePortUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortUlong( ScsiPortWritePortUlong(
IN PULONG Port, IN PULONG Port,
IN ULONG Value) IN ULONG Value)
@ -1465,7 +1465,7 @@ ScsiPortWritePortUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortUshort( ScsiPortWritePortUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN USHORT Value) IN USHORT Value)
@ -1474,7 +1474,7 @@ ScsiPortWritePortUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterBufferUchar( ScsiPortWriteRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -1485,7 +1485,7 @@ ScsiPortWriteRegisterBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterBufferUlong( ScsiPortWriteRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -1496,7 +1496,7 @@ ScsiPortWriteRegisterBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterBufferUshort( ScsiPortWriteRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -1507,7 +1507,7 @@ ScsiPortWriteRegisterBufferUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterUchar( ScsiPortWriteRegisterUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN ULONG Value) IN ULONG Value)
@ -1516,7 +1516,7 @@ ScsiPortWriteRegisterUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterUlong( ScsiPortWriteRegisterUlong(
IN PULONG Register, IN PULONG Register,
IN ULONG Value) IN ULONG Value)
@ -1525,7 +1525,7 @@ ScsiPortWriteRegisterUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterUshort( ScsiPortWriteRegisterUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN USHORT Value) IN USHORT Value)

View file

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE directory SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE directory SYSTEM "../../../tools/rbuild/project.dtd">
<module name="freeldr_arch" type="objectlibrary"> <module name="freeldr_arch" type="objectlibrary" crt="static">
<include base="freeldr_base">include</include> <include base="freeldr_base">include</include>
<include base="freeldr_base">cache</include> <include base="freeldr_base">cache</include>
<include base="ntoskrnl">include</include> <include base="ntoskrnl">include</include>

View file

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="freeldr_base" type="objectlibrary"> <module name="freeldr_base" type="objectlibrary" crt="static">
<include base="freeldr_base">include</include> <include base="freeldr_base">include</include>
<include base="freeldr_base">cache</include> <include base="freeldr_base">cache</include>
<include base="cmlib">.</include> <include base="cmlib">.</include>

View file

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="freeldr_main" type="objectlibrary"> <module name="freeldr_main" type="objectlibrary" crt="static">
<include base="freeldr_main">include</include> <include base="freeldr_main">include</include>
<include base="ntoskrnl">include</include> <include base="ntoskrnl">include</include>
<define name="_NTHAL_" /> <define name="_NTHAL_" />

View file

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="setupldr_main" type="objectlibrary"> <module name="setupldr_main" type="objectlibrary" crt="static">
<include base="setupldr_main">include</include> <include base="setupldr_main">include</include>
<include base="ntoskrnl">include</include> <include base="ntoskrnl">include</include>
<define name="_NTHAL_" /> <define name="_NTHAL_" />

View file

@ -232,7 +232,7 @@ WinLdrLoadDeviceDriver(PLOADER_PARAMETER_BLOCK LoaderBlock,
PVOID DriverBase; PVOID DriverBase;
// Separate the path to file name and directory path // Separate the path to file name and directory path
snprintf(DriverPath, sizeof(DriverPath), "%wZ", FilePath); _snprintf(DriverPath, sizeof(DriverPath), "%wZ", FilePath);
DriverNamePos = strrchr(DriverPath, '\\'); DriverNamePos = strrchr(DriverPath, '\\');
if (DriverNamePos != NULL) if (DriverNamePos != NULL)
{ {
@ -261,7 +261,7 @@ WinLdrLoadDeviceDriver(PLOADER_PARAMETER_BLOCK LoaderBlock,
} }
// It's not loaded, we have to load it // It's not loaded, we have to load it
snprintf(FullPath, sizeof(FullPath), "%s%wZ", BootPath, FilePath); _snprintf(FullPath, sizeof(FullPath), "%s%wZ", BootPath, FilePath);
Status = WinLdrLoadImage(FullPath, LoaderBootDriver, &DriverBase); Status = WinLdrLoadImage(FullPath, LoaderBootDriver, &DriverBase);
if (!Status) if (!Status)
return FALSE; return FALSE;

View file

@ -52,7 +52,27 @@ HRESULT
WINAPI WINAPI
DllUnregisterServer(void) DllUnregisterServer(void)
{ {
return S_OK; ULONG Index = 0;
LPOLESTR pStr;
HRESULT hr = S_OK;
HKEY hClass;
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_SET_VALUE, &hClass) != ERROR_SUCCESS)
return E_FAIL;
do
{
hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
if (FAILED(hr))
break;
RegDeleteKeyW(hClass, pStr);
CoTaskMemFree(pStr);
Index++;
}while(InterfaceTable[Index].lpfnCI != 0);
RegCloseKey(hClass);
return hr;
} }
extern "C" extern "C"
@ -61,7 +81,39 @@ HRESULT
WINAPI WINAPI
DllRegisterServer(void) DllRegisterServer(void)
{ {
return S_OK; ULONG Index = 0;
LPOLESTR pStr;
HRESULT hr = S_OK;
HKEY hClass, hKey, hSubKey;
static LPCWSTR ModuleName = L"bdaplgin.ax";
static LPCWSTR ThreadingModel = L"Both";
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_WRITE, &hClass) != ERROR_SUCCESS)
return E_FAIL;
do
{
hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
if (FAILED(hr))
break;
if (RegCreateKeyExW(hClass, pStr, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS)
{
if (RegCreateKeyExW(hKey, L"InprocServer32", 0, 0, 0, KEY_WRITE, NULL, &hSubKey, 0) == ERROR_SUCCESS)
{
RegSetValueExW(hSubKey, 0, 0, REG_SZ, (const BYTE*)ModuleName, (wcslen(ModuleName) + 1) * sizeof(WCHAR));
RegSetValueExW(hSubKey, L"ThreadingModel", 0, REG_SZ, (const BYTE*)ThreadingModel, (wcslen(ThreadingModel) + 1) * sizeof(WCHAR));
RegCloseKey(hSubKey);
}
RegCloseKey(hKey);
}
CoTaskMemFree(pStr);
Index++;
}while(InterfaceTable[Index].lpfnCI != 0);
RegCloseKey(hClass);
return hr;
} }
KSDDKAPI KSDDKAPI

View file

@ -3,6 +3,7 @@
<group> <group>
<module name="bdaplgin" type="win32dll" baseaddress="${BASEADDRESS_BDAPLGIN}" installbase="system32" installname="bdaplgin.ax"> <module name="bdaplgin" type="win32dll" baseaddress="${BASEADDRESS_BDAPLGIN}" installbase="system32" installname="bdaplgin.ax">
<importlibrary definition="bdaplgin.spec" /> <importlibrary definition="bdaplgin.spec" />
<autoregister infsection="OleControlDlls" type="DllRegisterServer" />
<include base="bdaplgin">.</include> <include base="bdaplgin">.</include>
<library>ntdll</library> <library>ntdll</library>
<library>kernel32</library> <library>kernel32</library>

View file

@ -43,6 +43,12 @@
<directory name="msdmo"> <directory name="msdmo">
<xi:include href="msdmo/msdmo.rbuild" /> <xi:include href="msdmo/msdmo.rbuild" />
</directory> </directory>
<directory name="msdvbnp">
<xi:include href="msdvbnp/msdvbnp.rbuild" />
</directory>
<directory name="msvidctl">
<xi:include href="msvidctl/msvidctl.rbuild" />
</directory>
<directory name="qedit"> <directory name="qedit">
<xi:include href="qedit/qedit.rbuild" /> <xi:include href="qedit/qedit.rbuild" />
</directory> </directory>

View file

@ -343,7 +343,27 @@ HRESULT
WINAPI WINAPI
DllUnregisterServer(void) DllUnregisterServer(void)
{ {
return S_OK; ULONG Index = 0;
LPOLESTR pStr;
HRESULT hr = S_OK;
HKEY hClass;
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_SET_VALUE, &hClass) != ERROR_SUCCESS)
return E_FAIL;
do
{
hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
if (FAILED(hr))
break;
RegDeleteKeyW(hClass, pStr);
CoTaskMemFree(pStr);
Index++;
}while(InterfaceTable[Index].lpfnCI != 0);
RegCloseKey(hClass);
return hr;
} }
extern "C" extern "C"
@ -352,7 +372,39 @@ HRESULT
WINAPI WINAPI
DllRegisterServer(void) DllRegisterServer(void)
{ {
return S_OK; ULONG Index = 0;
LPOLESTR pStr;
HRESULT hr = S_OK;
HKEY hClass, hKey, hSubKey;
static LPCWSTR ModuleName = L"ksproxy.ax";
static LPCWSTR ThreadingModel = L"Both";
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_WRITE, &hClass) != ERROR_SUCCESS)
return E_FAIL;
do
{
hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
if (FAILED(hr))
break;
if (RegCreateKeyExW(hClass, pStr, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS)
{
if (RegCreateKeyExW(hKey, L"InprocServer32", 0, 0, 0, KEY_WRITE, NULL, &hSubKey, 0) == ERROR_SUCCESS)
{
RegSetValueExW(hSubKey, 0, 0, REG_SZ, (const BYTE*)ModuleName, (wcslen(ModuleName) + 1) * sizeof(WCHAR));
RegSetValueExW(hSubKey, L"ThreadingModel", 0, REG_SZ, (const BYTE*)ThreadingModel, (wcslen(ThreadingModel) + 1) * sizeof(WCHAR));
RegCloseKey(hSubKey);
}
RegCloseKey(hKey);
}
CoTaskMemFree(pStr);
Index++;
}while(InterfaceTable[Index].lpfnCI != 0);
RegCloseKey(hClass);
return hr;
} }
KSDDKAPI KSDDKAPI

View file

@ -3,6 +3,7 @@
<group> <group>
<module name="ksproxy" type="win32dll" entrypoint="0" baseaddress="${BASEADDRESS_KSPROXY}" installbase="system32" installname="ksproxy.ax"> <module name="ksproxy" type="win32dll" entrypoint="0" baseaddress="${BASEADDRESS_KSPROXY}" installbase="system32" installname="ksproxy.ax">
<importlibrary definition="ksproxy.spec" /> <importlibrary definition="ksproxy.spec" />
<autoregister infsection="OleControlDlls" type="DllRegisterServer" />
<include base="ksproxy">.</include> <include base="ksproxy">.</include>
<library>ntdll</library> <library>ntdll</library>
<library>kernel32</library> <library>kernel32</library>

View file

@ -0,0 +1,169 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS BDA Proxy
* FILE: dll/directx/msdvbnp/ethernetfilter.cpp
* PURPOSE: IBDA_EthernetFilter interface
*
* PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
*/
#include "precomp.h"
class CEthernetFilter : public IBDA_EthernetFilter
{
public:
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
//IBDA_EthernetFilter
HRESULT STDMETHODCALLTYPE GetMulticastListSize(ULONG *pulcbAddresses);
HRESULT STDMETHODCALLTYPE PutMulticastList(ULONG ulcbAddresses, BYTE * pAddressList);
HRESULT STDMETHODCALLTYPE GetMulticastList(ULONG *pulcbAddresses, BYTE *pAddressList);
HRESULT STDMETHODCALLTYPE PutMulticastMode(ULONG ulModeMask);
HRESULT STDMETHODCALLTYPE GetMulticastMode(ULONG *pulModeMask);
CEthernetFilter(IBDA_NetworkProvider * pNetworkProvider);
virtual ~CEthernetFilter();
protected:
IBDA_NetworkProvider * m_pNetworkProvider;
ULONG m_ulcbAddresses;
BYTE * m_pAddressList;
ULONG m_ulModeMask;
};
CEthernetFilter::CEthernetFilter(
IBDA_NetworkProvider * pNetworkProvider) : m_pNetworkProvider(pNetworkProvider),
m_ulcbAddresses(0),
m_pAddressList(0),
m_ulModeMask(0)
{
}
CEthernetFilter::~CEthernetFilter()
{
if (m_pAddressList)
CoTaskMemFree(m_pAddressList);
}
HRESULT
STDMETHODCALLTYPE
CEthernetFilter::QueryInterface(
REFIID InterfaceId,
PVOID* Interface)
{
assert(m_pNetworkProvider);
return m_pNetworkProvider->QueryInterface(InterfaceId, Interface);
}
ULONG
STDMETHODCALLTYPE
CEthernetFilter::AddRef()
{
assert(m_pNetworkProvider);
return m_pNetworkProvider->AddRef();
}
ULONG
STDMETHODCALLTYPE
CEthernetFilter::Release()
{
assert(m_pNetworkProvider);
return m_pNetworkProvider->Release();
}
//-------------------------------------------------------------------
//IBDA_EthernetFilter
//
HRESULT
STDMETHODCALLTYPE
CEthernetFilter::PutMulticastList(
ULONG ulcbAddresses,
BYTE * pAddressList)
{
if (!ulcbAddresses || !pAddressList)
return E_POINTER;
if (m_pAddressList)
CoTaskMemFree(m_pAddressList);
m_pAddressList = (BYTE*)CoTaskMemAlloc(ulcbAddresses);
if (!m_pAddressList)
return E_OUTOFMEMORY;
CopyMemory(m_pAddressList, pAddressList, ulcbAddresses);
m_ulcbAddresses = ulcbAddresses;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CEthernetFilter::GetMulticastList(
ULONG *pulcbAddresses,
BYTE *pAddressList)
{
if (!pulcbAddresses || !pAddressList)
return E_POINTER;
if (*pulcbAddresses < m_ulcbAddresses)
return E_OUTOFMEMORY;
CopyMemory(pAddressList, m_pAddressList, m_ulcbAddresses);
*pulcbAddresses = m_ulcbAddresses;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CEthernetFilter::GetMulticastListSize(
ULONG *pulcbAddresses)
{
if (!pulcbAddresses)
return E_POINTER;
*pulcbAddresses = m_ulcbAddresses;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CEthernetFilter::PutMulticastMode(
ULONG ulModeMask)
{
m_ulModeMask = ulModeMask;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CEthernetFilter::GetMulticastMode(
ULONG *pulModeMask)
{
*pulModeMask = m_ulModeMask;
return NOERROR;
}
HRESULT
WINAPI
CEthernetFilter_fnConstructor(
IBDA_NetworkProvider * pNetworkProvider,
REFIID riid,
LPVOID * ppv)
{
CEthernetFilter * filter = new CEthernetFilter(pNetworkProvider);
if (!filter)
return E_OUTOFMEMORY;
if (FAILED(filter->QueryInterface(riid, ppv)))
{
/* not supported */
delete filter;
return E_NOINTERFACE;
}
return NOERROR;
}

View file

@ -0,0 +1,170 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS BDA Proxy
* FILE: dll/directx/msdvbnp/ipv4.cpp
* PURPOSE: IBDA_IPV4Filter interface
*
* PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
*/
#include "precomp.h"
class CIPV4Filter : public IBDA_IPV4Filter
{
public:
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
//IBDA_IPV4Filter
HRESULT STDMETHODCALLTYPE GetMulticastListSize(ULONG *pulcbAddresses);
HRESULT STDMETHODCALLTYPE PutMulticastList(ULONG ulcbAddresses, BYTE * pAddressList);
HRESULT STDMETHODCALLTYPE GetMulticastList(ULONG *pulcbAddresses, BYTE *pAddressList);
HRESULT STDMETHODCALLTYPE PutMulticastMode(ULONG ulModeMask);
HRESULT STDMETHODCALLTYPE GetMulticastMode(ULONG *pulModeMask);
CIPV4Filter(IBDA_NetworkProvider * pNetworkProvider);
virtual ~CIPV4Filter();
protected:
IBDA_NetworkProvider * m_pNetworkProvider;
ULONG m_ulcbAddresses;
BYTE * m_pAddressList;
ULONG m_ulModeMask;
};
CIPV4Filter::CIPV4Filter(
IBDA_NetworkProvider * pNetworkProvider) : m_pNetworkProvider(pNetworkProvider),
m_ulcbAddresses(0),
m_pAddressList(0),
m_ulModeMask(0)
{
}
CIPV4Filter::~CIPV4Filter()
{
if (m_pAddressList)
CoTaskMemFree(m_pAddressList);
}
HRESULT
STDMETHODCALLTYPE
CIPV4Filter::QueryInterface(
REFIID InterfaceId,
PVOID* Interface)
{
assert(m_pNetworkProvider);
return m_pNetworkProvider->QueryInterface(InterfaceId, Interface);
}
ULONG
STDMETHODCALLTYPE
CIPV4Filter::AddRef()
{
assert(m_pNetworkProvider);
return m_pNetworkProvider->AddRef();
}
ULONG
STDMETHODCALLTYPE
CIPV4Filter::Release()
{
assert(m_pNetworkProvider);
return m_pNetworkProvider->Release();
}
//-------------------------------------------------------------------
//IBDA_IPV4Filter
//
HRESULT
STDMETHODCALLTYPE
CIPV4Filter::GetMulticastListSize(
ULONG *pulcbAddresses)
{
if (!pulcbAddresses)
return E_POINTER;
*pulcbAddresses = 0;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CIPV4Filter::PutMulticastList(
ULONG ulcbAddresses,
BYTE * pAddressList)
{
if (!ulcbAddresses || !pAddressList)
return E_POINTER;
if (m_pAddressList)
CoTaskMemFree(m_pAddressList);
m_pAddressList = (BYTE*)CoTaskMemAlloc(ulcbAddresses);
if (!m_pAddressList)
return E_OUTOFMEMORY;
CopyMemory(m_pAddressList, pAddressList, ulcbAddresses);
m_ulcbAddresses = ulcbAddresses;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CIPV4Filter::GetMulticastList(
ULONG *pulcbAddresses,
BYTE *pAddressList)
{
if (!pulcbAddresses || !pAddressList)
return E_POINTER;
if (*pulcbAddresses < m_ulcbAddresses)
return E_OUTOFMEMORY;
CopyMemory(pAddressList, m_pAddressList, m_ulcbAddresses);
*pulcbAddresses = m_ulcbAddresses;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CIPV4Filter::PutMulticastMode(
ULONG ulModeMask)
{
m_ulModeMask = ulModeMask;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CIPV4Filter::GetMulticastMode(
ULONG *pulModeMask)
{
*pulModeMask = m_ulModeMask;
return NOERROR;
}
HRESULT
WINAPI
CIPV4Filter_fnConstructor(
IBDA_NetworkProvider * pNetworkProvider,
REFIID riid,
LPVOID * ppv)
{
CIPV4Filter * filter = new CIPV4Filter(pNetworkProvider);
if (!filter)
return E_OUTOFMEMORY;
if (FAILED(filter->QueryInterface(riid, ppv)))
{
/* not supported */
delete filter;
return E_NOINTERFACE;
}
return NOERROR;
}

View file

@ -0,0 +1,167 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS BDA Proxy
* FILE: dll/directx/msdvbnp/ipv6.cpp
* PURPOSE: IBDA_IPV6Filter interface
*
* PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
*/
#include "precomp.h"
class CIPV6Filter : public IBDA_IPV6Filter
{
public:
STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
//IBDA_IPV6Filter
HRESULT STDMETHODCALLTYPE GetMulticastListSize(ULONG *pulcbAddresses);
HRESULT STDMETHODCALLTYPE PutMulticastList(ULONG ulcbAddresses, BYTE * pAddressList);
HRESULT STDMETHODCALLTYPE GetMulticastList(ULONG *pulcbAddresses, BYTE *pAddressList);
HRESULT STDMETHODCALLTYPE PutMulticastMode(ULONG ulModeMask);
HRESULT STDMETHODCALLTYPE GetMulticastMode(ULONG *pulModeMask);
CIPV6Filter(IBDA_NetworkProvider * pNetworkProvider);
virtual ~CIPV6Filter();
protected:
IBDA_NetworkProvider * m_pNetworkProvider;
ULONG m_ulcbAddresses;
BYTE * m_pAddressList;
ULONG m_ulModeMask;
};
CIPV6Filter::CIPV6Filter(
IBDA_NetworkProvider * pNetworkProvider) : m_pNetworkProvider(pNetworkProvider),
m_ulcbAddresses(0),
m_pAddressList(0),
m_ulModeMask(0)
{
}
CIPV6Filter::~CIPV6Filter()
{
if (m_pAddressList)
CoTaskMemFree(m_pAddressList);
}
HRESULT
STDMETHODCALLTYPE
CIPV6Filter::QueryInterface(
REFIID InterfaceId,
PVOID* Interface)
{
assert(m_pNetworkProvider);
return m_pNetworkProvider->QueryInterface(InterfaceId, Interface);
}
ULONG
STDMETHODCALLTYPE
CIPV6Filter::AddRef()
{
assert(m_pNetworkProvider);
return m_pNetworkProvider->AddRef();
}
ULONG
STDMETHODCALLTYPE
CIPV6Filter::Release()
{
assert(m_pNetworkProvider);
return m_pNetworkProvider->Release();
}
//-------------------------------------------------------------------
//IBDA_IPV6Filter
//
HRESULT
STDMETHODCALLTYPE
CIPV6Filter::GetMulticastListSize(
ULONG *pulcbAddresses)
{
if (!pulcbAddresses)
return E_POINTER;
*pulcbAddresses = 0;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CIPV6Filter::GetMulticastList(
ULONG *pulcbAddresses,
BYTE *pAddressList)
{
if (!pulcbAddresses || !pAddressList)
return E_POINTER;
if (*pulcbAddresses < m_ulcbAddresses)
return E_OUTOFMEMORY;
CopyMemory(pAddressList, m_pAddressList, m_ulcbAddresses);
*pulcbAddresses = m_ulcbAddresses;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CIPV6Filter::PutMulticastList(
ULONG ulcbAddresses,
BYTE * pAddressList)
{
if (!ulcbAddresses || !pAddressList)
return E_POINTER;
if (m_pAddressList)
CoTaskMemFree(m_pAddressList);
m_pAddressList = (BYTE*)CoTaskMemAlloc(ulcbAddresses);
if (!m_pAddressList)
return E_OUTOFMEMORY;
CopyMemory(m_pAddressList, pAddressList, ulcbAddresses);
m_ulcbAddresses = ulcbAddresses;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CIPV6Filter::PutMulticastMode(
ULONG ulModeMask)
{
m_ulModeMask = ulModeMask;
return NOERROR;
}
HRESULT
STDMETHODCALLTYPE
CIPV6Filter::GetMulticastMode(
ULONG *pulModeMask)
{
*pulModeMask = m_ulModeMask;
return NOERROR;
}
HRESULT
WINAPI
CIPV6Filter_fnConstructor(
IBDA_NetworkProvider * pNetworkProvider,
REFIID riid,
LPVOID * ppv)
{
CIPV6Filter * filter = new CIPV6Filter(pNetworkProvider);
if (!filter)
return E_OUTOFMEMORY;
if (FAILED(filter->QueryInterface(riid, ppv)))
{
/* not supported */
delete filter;
return E_NOINTERFACE;
}
return NOERROR;
}

View file

@ -48,7 +48,27 @@ HRESULT
WINAPI WINAPI
DllUnregisterServer(void) DllUnregisterServer(void)
{ {
return S_OK; ULONG Index = 0;
LPOLESTR pStr;
HRESULT hr = S_OK;
HKEY hClass;
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_SET_VALUE, &hClass) != ERROR_SUCCESS)
return E_FAIL;
do
{
hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
if (FAILED(hr))
break;
RegDeleteKeyW(hClass, pStr);
CoTaskMemFree(pStr);
Index++;
}while(InterfaceTable[Index].lpfnCI != 0);
RegCloseKey(hClass);
return hr;
} }
extern "C" extern "C"
@ -57,7 +77,39 @@ HRESULT
WINAPI WINAPI
DllRegisterServer(void) DllRegisterServer(void)
{ {
return S_OK; ULONG Index = 0;
LPOLESTR pStr;
HRESULT hr = S_OK;
HKEY hClass, hKey, hSubKey;
static LPCWSTR ModuleName = L"msdvbnp.ax";
static LPCWSTR ThreadingModel = L"Both";
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_WRITE, &hClass) != ERROR_SUCCESS)
return E_FAIL;
do
{
hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
if (FAILED(hr))
break;
if (RegCreateKeyExW(hClass, pStr, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS)
{
if (RegCreateKeyExW(hKey, L"InprocServer32", 0, 0, 0, KEY_WRITE, NULL, &hSubKey, 0) == ERROR_SUCCESS)
{
RegSetValueExW(hSubKey, 0, 0, REG_SZ, (const BYTE*)ModuleName, (wcslen(ModuleName) + 1) * sizeof(WCHAR));
RegSetValueExW(hSubKey, L"ThreadingModel", 0, REG_SZ, (const BYTE*)ThreadingModel, (wcslen(ThreadingModel) + 1) * sizeof(WCHAR));
RegCloseKey(hSubKey);
}
RegCloseKey(hKey);
}
CoTaskMemFree(pStr);
Index++;
}while(InterfaceTable[Index].lpfnCI != 0);
RegCloseKey(hClass);
return hr;
} }
KSDDKAPI KSDDKAPI

View file

@ -3,6 +3,7 @@
<group> <group>
<module name="msdvbnp" type="win32dll" baseaddress="${BASEADDRESS_MSDVBNP}" installbase="system32" installname="msdvbnp.ax"> <module name="msdvbnp" type="win32dll" baseaddress="${BASEADDRESS_MSDVBNP}" installbase="system32" installname="msdvbnp.ax">
<importlibrary definition="msdvbnp.spec" /> <importlibrary definition="msdvbnp.spec" />
<autoregister infsection="OleControlDlls" type="DllRegisterServer" />
<include base="msdvbnp">.</include> <include base="msdvbnp">.</include>
<library>ntdll</library> <library>ntdll</library>
<library>kernel32</library> <library>kernel32</library>
@ -22,8 +23,11 @@
<file>classfactory.cpp</file> <file>classfactory.cpp</file>
<file>enum_mediatypes.cpp</file> <file>enum_mediatypes.cpp</file>
<file>enumpins.cpp</file> <file>enumpins.cpp</file>
<file>ethernetfilter.cpp</file>
<file>msdvbnp.cpp</file> <file>msdvbnp.cpp</file>
<file>msdvbnp.rc</file> <file>msdvbnp.rc</file>
<file>ipv4.cpp</file>
<file>ipv6.cpp</file>
<file>networkprovider.cpp</file> <file>networkprovider.cpp</file>
<file>pin.cpp</file> <file>pin.cpp</file>
<file>scanningtuner.cpp</file> <file>scanningtuner.cpp</file>

View file

@ -74,6 +74,9 @@ protected:
GUID m_ClassID; GUID m_ClassID;
DeviceFilterStack m_DeviceFilters; DeviceFilterStack m_DeviceFilters;
IScanningTuner * m_Tuner; IScanningTuner * m_Tuner;
IBDA_IPV6Filter * m_IPV6Filter;
IBDA_IPV4Filter * m_IPV4Filter;
IBDA_EthernetFilter * m_EthernetFilter;
}; };
HRESULT HRESULT
@ -116,6 +119,51 @@ CNetworkProvider::QueryInterface(
return NOERROR; return NOERROR;
} }
if (IsEqualGUID(refiid, IID_IBDA_IPV6Filter))
{
// construct scanning tuner
if (!m_IPV6Filter)
{
HRESULT hr = CIPV6Filter_fnConstructor((IBDA_NetworkProvider*)this, refiid, (void**)&m_IPV6Filter);
if (FAILED(hr))
return hr;
}
m_IPV6Filter->AddRef();
*Output = (IUnknown*)m_IPV6Filter;
return NOERROR;
}
if (IsEqualGUID(refiid, IID_IBDA_IPV4Filter))
{
// construct scanning tuner
if (!m_IPV4Filter)
{
HRESULT hr = CIPV4Filter_fnConstructor((IBDA_NetworkProvider*)this, refiid, (void**)&m_IPV4Filter);
if (FAILED(hr))
return hr;
}
m_IPV4Filter->AddRef();
*Output = (IUnknown*)m_IPV4Filter;
return NOERROR;
}
if (IsEqualGUID(refiid, IID_IBDA_EthernetFilter))
{
// construct scanning tuner
if (!m_EthernetFilter)
{
HRESULT hr = CIPV4Filter_fnConstructor((IBDA_NetworkProvider*)this, refiid, (void**)&m_EthernetFilter);
if (FAILED(hr))
return hr;
}
m_EthernetFilter->AddRef();
*Output = (IUnknown*)m_EthernetFilter;
return NOERROR;
}
if (IsEqualGUID(refiid, IID_IBDA_NetworkProvider)) if (IsEqualGUID(refiid, IID_IBDA_NetworkProvider))
{ {
*Output = (IBDA_NetworkProvider*)(this); *Output = (IBDA_NetworkProvider*)(this);
@ -163,7 +211,10 @@ CNetworkProvider::CNetworkProvider(LPCGUID ClassID) : m_Ref(0),
m_ReferenceClock(0), m_ReferenceClock(0),
m_FilterState(State_Stopped), m_FilterState(State_Stopped),
m_DeviceFilters(), m_DeviceFilters(),
m_Tuner(0) m_Tuner(0),
m_IPV6Filter(0),
m_IPV4Filter(0),
m_EthernetFilter(0)
{ {
m_Pins[0] = 0; m_Pins[0] = 0;

View file

@ -82,6 +82,30 @@ CEnumMediaTypes_fnConstructor(
REFIID riid, REFIID riid,
LPVOID * ppv); LPVOID * ppv);
/* ethernetfilter.cpp */
HRESULT
WINAPI
CEthernetFilter_fnConstructor(
IBDA_NetworkProvider * pNetworkProvider,
REFIID riid,
LPVOID * ppv);
/* ipv6.cpp */
HRESULT
WINAPI
CIPV6Filter_fnConstructor(
IBDA_NetworkProvider * pNetworkProvider,
REFIID riid,
LPVOID * ppv);
/* ipv4.cpp */
HRESULT
WINAPI
CIPV4Filter_fnConstructor(
IBDA_NetworkProvider * pNetworkProvider,
REFIID riid,
LPVOID * ppv);
#ifndef _MSC_VER #ifndef _MSC_VER
extern const GUID CLSID_DVBTNetworkProvider; extern const GUID CLSID_DVBTNetworkProvider;
#endif #endif

View file

@ -287,7 +287,7 @@ CScanningTunner::performDVBTTune(
IDVBTuneRequest * pDVBTRequest, IDVBTuneRequest * pDVBTRequest,
IDVBTLocator *pDVBTLocator) IDVBTLocator *pDVBTLocator)
{ {
HRESULT hr; HRESULT hr = S_OK;
ULONG Index; ULONG Index;
IBDA_Topology *pTopo; IBDA_Topology *pTopo;
IUnknown *pNode; IUnknown *pNode;

View file

@ -48,7 +48,27 @@ HRESULT
WINAPI WINAPI
DllUnregisterServer(void) DllUnregisterServer(void)
{ {
return S_OK; ULONG Index = 0;
LPOLESTR pStr;
HRESULT hr = S_OK;
HKEY hClass;
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_SET_VALUE, &hClass) != ERROR_SUCCESS)
return E_FAIL;
do
{
hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
if (FAILED(hr))
break;
RegDeleteKeyW(hClass, pStr);
CoTaskMemFree(pStr);
Index++;
}while(InterfaceTable[Index].lpfnCI != 0);
RegCloseKey(hClass);
return hr;
} }
extern "C" extern "C"
@ -57,7 +77,39 @@ HRESULT
WINAPI WINAPI
DllRegisterServer(void) DllRegisterServer(void)
{ {
return S_OK; ULONG Index = 0;
LPOLESTR pStr;
HRESULT hr = S_OK;
HKEY hClass, hKey, hSubKey;
static LPCWSTR ModuleName = L"msvidctl.ax";
static LPCWSTR ThreadingModel = L"Both";
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_WRITE, &hClass) != ERROR_SUCCESS)
return E_FAIL;
do
{
hr = StringFromCLSID(*InterfaceTable[Index].riid, &pStr);
if (FAILED(hr))
break;
if (RegCreateKeyExW(hClass, pStr, 0, 0, 0, KEY_WRITE, NULL, &hKey, 0) == ERROR_SUCCESS)
{
if (RegCreateKeyExW(hKey, L"InprocServer32", 0, 0, 0, KEY_WRITE, NULL, &hSubKey, 0) == ERROR_SUCCESS)
{
RegSetValueExW(hSubKey, 0, 0, REG_SZ, (const BYTE*)ModuleName, (wcslen(ModuleName) + 1) * sizeof(WCHAR));
RegSetValueExW(hSubKey, L"ThreadingModel", 0, REG_SZ, (const BYTE*)ThreadingModel, (wcslen(ThreadingModel) + 1) * sizeof(WCHAR));
RegCloseKey(hSubKey);
}
RegCloseKey(hKey);
}
CoTaskMemFree(pStr);
Index++;
}while(InterfaceTable[Index].lpfnCI != 0);
RegCloseKey(hClass);
return hr;
} }
KSDDKAPI KSDDKAPI

View file

@ -3,6 +3,7 @@
<group> <group>
<module name="msvidctl" type="win32dll" baseaddress="${BASEADDRESS_MSVIDCTL}" installbase="system32" installname="msvidctl.dll"> <module name="msvidctl" type="win32dll" baseaddress="${BASEADDRESS_MSVIDCTL}" installbase="system32" installname="msvidctl.dll">
<importlibrary definition="msvidctl.spec" /> <importlibrary definition="msvidctl.spec" />
<autoregister infsection="OleControlDlls" type="DllRegisterServer" />
<include base="msvidctl">.</include> <include base="msvidctl">.</include>
<library>ntdll</library> <library>ntdll</library>
<library>kernel32</library> <library>kernel32</library>

View file

@ -12,6 +12,7 @@
<include base="ReactOS">include/reactos/subsys</include> <include base="ReactOS">include/reactos/subsys</include>
<define name="__NTDLL__" /> <define name="__NTDLL__" />
<define name="_NTOSKRNL_" /> <define name="_NTOSKRNL_" />
<define name="CRTDLL" />
<library>rtl</library> <library>rtl</library>
<library>ntdllsys</library> <library>ntdllsys</library>
<library>libcntpr</library> <library>libcntpr</library>

View file

@ -5,6 +5,7 @@
<define name="USE_MSVCRT_PREFIX" /> <define name="USE_MSVCRT_PREFIX" />
<define name="_MSVCRT_LIB_" /> <define name="_MSVCRT_LIB_" />
<define name="_MSVCRT_" /> <define name="_MSVCRT_" />
<define name="CRTDLL" />
<define name="_CTYPE_DISABLE_MACROS" /> <define name="_CTYPE_DISABLE_MACROS" />
<define name="_NO_INLINING" /> <define name="_NO_INLINING" />

View file

@ -292,7 +292,7 @@ CreateBitmap(INT Width,
INT Height, INT Height,
UINT Planes, UINT Planes,
UINT BitsPixel, UINT BitsPixel,
PCVOID pUnsafeBits) CONST VOID* pUnsafeBits)
{ {
/* FIXME some part should be done in user mode */ /* FIXME some part should be done in user mode */
if (Width && Height) if (Width && Height)

View file

@ -673,7 +673,7 @@ GetRelAbs(
/* /*
* @implemented * @implemented
*/ */
DWORD INT
WINAPI WINAPI
SetRelAbs( SetRelAbs(
HDC hdc, HDC hdc,

View file

@ -1671,7 +1671,7 @@ RemoveFontResourceExW(LPCWSTR lpFileName,
/* /*
* @implemented * @implemented
*/ */
DWORD LONG
WINAPI WINAPI
GdiGetCharDimensions(HDC hdc, LPTEXTMETRICW lptm, LONG *height) GdiGetCharDimensions(HDC hdc, LPTEXTMETRICW lptm, LONG *height)
{ {

View file

@ -10,7 +10,6 @@ typedef VOID
typedef VOID typedef VOID
(WINAPI *PINTERFACE_DEREFERENCE)( (WINAPI *PINTERFACE_DEREFERENCE)(
PVOID Context); PVOID Context);
#define DDKAPI __stdcall // FIXME
#include <ntndk.h> #include <ntndk.h>
#include <hidusage.h> #include <hidusage.h>
#include <hidclass.h> #include <hidclass.h>

View file

@ -759,13 +759,22 @@
@ stdcall ResetWriteWatch(ptr long) @ stdcall ResetWriteWatch(ptr long)
@ stdcall RestoreLastError(long) ntdll.RtlRestoreLastWin32Error @ stdcall RestoreLastError(long) ntdll.RtlRestoreLastWin32Error
@ stdcall ResumeThread(long) @ stdcall ResumeThread(long)
@ stdcall -arch=x86_64 RtlAddFunctionTable(ptr long double)
@ stdcall RtlCaptureContext(ptr) ntdll.RtlCaptureContext @ stdcall RtlCaptureContext(ptr) ntdll.RtlCaptureContext
@ stdcall RtlCaptureStackBackTrace(long long ptr ptr) ntdll.RtlCaptureStackBackTrace @ stdcall RtlCaptureStackBackTrace(long long ptr ptr) ntdll.RtlCaptureStackBackTrace
@ stdcall -arch=x86_64 RtlCompareMemory(ptr ptr ptr)
@ stdcall -arch=x86_64 RtlCopyMemory(ptr ptr ptr)
@ stdcall -arch=x86_64 RtlDeleteFunctionTable(ptr)
@ stdcall RtlFillMemory(ptr long long) ntdll.RtlFillMemory @ stdcall RtlFillMemory(ptr long long) ntdll.RtlFillMemory
@ stdcall -arch=x86_64 RtlInstallFunctionTableCallback(double double long ptr ptr ptr)
@ stdcall -arch=x86_64 RtlLookupFunctionEntry(ptr ptr ptr) ntdll.RtlLookupFunctionEntry
@ stdcall RtlMoveMemory(ptr ptr long) ntdll.RtlMoveMemory @ stdcall RtlMoveMemory(ptr ptr long) ntdll.RtlMoveMemory
@ stdcall -arch=x86_64 RtlPcToFileHeader(ptr ptr) ntdll.RtlPcToFileHeader
@ stdcall -arch=x86_64 RtlRaiseException(ptr) ntdll.RtlRaiseException
@ stdcall -arch=x86_64 RtlRestoreContext(ptr ptr) ntdll.RtlRestoreContext
@ stdcall RtlUnwind(ptr ptr ptr long) ntdll.RtlUnwind @ stdcall RtlUnwind(ptr ptr ptr long) ntdll.RtlUnwind
@ stdcall RtlVirtualUnwind(ptr ptr ptr long) ntdll.RtlVirtualUnwind @ stdcall -arch=x86_64 RtlUnwindEx(ptr ptr ptr ptr ptr ptr) ntdll.RtlUnwindEx
@ stdcall RtlLookupFunctionEntry(ptr ptr ptr) ntdll.RtlLookupFunctionEntry @ stdcall -arch=x86_64 RtlVirtualUnwind(ptr ptr ptr long) ntdll.RtlVirtualUnwind
@ stdcall RtlZeroMemory(ptr long) ntdll.RtlZeroMemory @ stdcall RtlZeroMemory(ptr long) ntdll.RtlZeroMemory
@ stdcall ScrollConsoleScreenBufferA(long ptr ptr ptr ptr) @ stdcall ScrollConsoleScreenBufferA(long ptr ptr ptr ptr)
@ stdcall ScrollConsoleScreenBufferW(long ptr ptr ptr ptr) @ stdcall ScrollConsoleScreenBufferW(long ptr ptr ptr ptr)

View file

@ -158,9 +158,9 @@ EXPORTS
__p__winminor @153 __p__winminor @153
__p__winver @154 __p__winver @154
__p__wpgmptr @155 __p__wpgmptr @155
; __pctype_func @156 __pctype_func @156
__pioinfo @157 DATA __pioinfo @157 DATA
; __pwctype_func @158 __pwctype_func @158
__pxcptinfoptrs @159 __pxcptinfoptrs @159
__set_app_type @160 __set_app_type @160
__setlc_active @161 DATA __setlc_active @161 DATA
@ -583,7 +583,7 @@ EXPORTS
_wcsupr @576 _wcsupr @576
_wctime @577 _wctime @577
; _wctime64 @578 ; _wctime64 @578
; _wctype @579 _wctype @579
_wenviron @580 DATA _wenviron @580 DATA
_wexecl @581 _wexecl @581
_wexecle @582 _wexecle @582

View file

@ -8,6 +8,7 @@
<define name="_MT" /> <define name="_MT" />
<define name="_CTYPE_DISABLE_MACROS" /> <define name="_CTYPE_DISABLE_MACROS" />
<define name="_NO_INLINING" /> <define name="_NO_INLINING" />
<define name="CRTDLL" />
<linkerflag linkerset="ld">-enable-stdcall-fixup</linkerflag> <linkerflag linkerset="ld">-enable-stdcall-fixup</linkerflag>
<!-- __MINGW_IMPORT needs to be defined differently because it's defined <!-- __MINGW_IMPORT needs to be defined differently because it's defined

View file

@ -6,6 +6,7 @@
<include base="msvcrt20">.</include> <include base="msvcrt20">.</include>
<include base="ReactOS">include/reactos/wine</include> <include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" /> <define name="__WINESRC__" />
<define name="CRTDLL" />
<file>msvcrt20.c</file> <file>msvcrt20.c</file>
<library>wine</library> <library>wine</library>
<library>msvcrt</library> <library>msvcrt</library>

View file

@ -6,6 +6,7 @@
<include base="msvcrt40">.</include> <include base="msvcrt40">.</include>
<include base="ReactOS">include/reactos/wine</include> <include base="ReactOS">include/reactos/wine</include>
<define name="__WINESRC__" /> <define name="__WINESRC__" />
<define name="CRTDLL" />
<file>msvcrt40.c</file> <file>msvcrt40.c</file>
<library>wine</library> <library>wine</library>
</module> </module>

View file

@ -3662,7 +3662,7 @@ HKEY WINAPI SetupDiOpenClassRegKeyExW(
if (!(l = RegOpenKeyExW(HKLM, if (!(l = RegOpenKeyExW(HKLM,
lpKeyName, lpKeyName,
0, 0,
0, samDesired,
&hClassesKey))) &hClassesKey)))
{ {
if (MachineName != NULL) if (MachineName != NULL)
@ -3699,8 +3699,209 @@ BOOL WINAPI SetupDiOpenDeviceInterfaceW(
DWORD OpenFlags, DWORD OpenFlags,
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData) PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData)
{ {
FIXME("%p %s %08x %p\n", struct DeviceInfoSet * list;
PCWSTR pEnd;
DWORD dwLength, dwError, dwIndex, dwKeyName, dwSubIndex;
CLSID ClassId;
WCHAR Buffer[MAX_PATH + 1];
WCHAR SymBuffer[MAX_PATH + 1];
WCHAR InstancePath[MAX_PATH + 1];
HKEY hKey, hDevKey, hSymKey;
struct DeviceInfo * deviceInfo;
struct DeviceInterface *deviceInterface;
BOOL Ret;
PLIST_ENTRY ItemList;
PLIST_ENTRY InterfaceListEntry;
TRACE("%p %s %08x %p\n",
DeviceInfoSet, debugstr_w(DevicePath), OpenFlags, DeviceInterfaceData); DeviceInfoSet, debugstr_w(DevicePath), OpenFlags, DeviceInterfaceData);
if (DeviceInterfaceData && DeviceInterfaceData->cbSize != sizeof(SP_DEVICE_INTERFACE_DATA))
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (((struct DeviceInfoSet *)DeviceInfoSet)->magic != SETUP_DEVICE_INFO_SET_MAGIC)
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
list = (struct DeviceInfoSet * )DeviceInfoSet;
dwLength = wcslen(DevicePath);
if (dwLength < 39)
{
/* path must be at least a guid length + L'\0' */
SetLastError(ERROR_BAD_PATHNAME);
return FALSE;
}
if (DevicePath[0] != L'\\' ||
DevicePath[1] != L'\\' ||
(DevicePath[2] != L'?' && DevicePath[2] != L'.') ||
DevicePath[3] != L'\\')
{
/* invalid formatted path */
SetLastError(ERROR_BAD_PATHNAME);
return FALSE;
}
/* check for reference strings */
pEnd = wcschr(&DevicePath[4], L'\\');
if (!pEnd)
{
/* no reference string */
pEnd = DevicePath + dwLength;
}
/* copy guid */
wcscpy(Buffer, pEnd - 37);
Buffer[36] = L'\0';
dwError = UuidFromStringW(Buffer, &ClassId);
if (dwError != NOERROR)
{
/* invalid formatted path */
SetLastError(ERROR_BAD_PATHNAME);
return FALSE;
}
hKey = SetupDiOpenClassRegKeyExW(&ClassId, KEY_READ, DIOCR_INTERFACE, list->MachineName, NULL);
if (hKey == INVALID_HANDLE_VALUE)
{
/* invalid device class */
return FALSE;
}
ItemList = list->ListHead.Flink;
while (ItemList != &list->ListHead)
{
deviceInfo = CONTAINING_RECORD(ItemList, struct DeviceInfo, ListEntry);
InterfaceListEntry = deviceInfo->InterfaceListHead.Flink;
while (InterfaceListEntry != &deviceInfo->InterfaceListHead)
{
deviceInterface = CONTAINING_RECORD(InterfaceListEntry, struct DeviceInterface, ListEntry);
if (!IsEqualIID(&deviceInterface->InterfaceClassGuid, &ClassId))
{
InterfaceListEntry = InterfaceListEntry->Flink;
continue;
}
if (!wcsicmp(deviceInterface->SymbolicLink, DevicePath))
{
if (DeviceInterfaceData)
{
DeviceInterfaceData->Reserved = (ULONG_PTR)deviceInterface;
DeviceInterfaceData->Flags = deviceInterface->Flags;
CopyMemory(&DeviceInterfaceData->InterfaceClassGuid, &ClassId, sizeof(GUID));
}
return TRUE;
}
}
}
dwIndex = 0;
do
{
Buffer[0] = 0;
dwKeyName = sizeof(Buffer) / sizeof(WCHAR);
dwError = RegEnumKeyExW(hKey, dwIndex, Buffer, &dwKeyName, NULL, NULL, NULL, NULL);
if (dwError != ERROR_SUCCESS)
break;
if (RegOpenKeyExW(hKey, Buffer, 0, KEY_READ, &hDevKey) != ERROR_SUCCESS)
break;
dwSubIndex = 0;
InstancePath[0] = 0;
dwKeyName = sizeof(InstancePath);
dwError = RegQueryValueExW(hDevKey, L"DeviceInstance", NULL, NULL, (LPBYTE)InstancePath, &dwKeyName);
while(TRUE)
{
Buffer[0] = 0;
dwKeyName = sizeof(Buffer) / sizeof(WCHAR);
dwError = RegEnumKeyExW(hDevKey, dwSubIndex, Buffer, &dwKeyName, NULL, NULL, NULL, NULL);
if (dwError != ERROR_SUCCESS)
break;
dwError = RegOpenKeyExW(hDevKey, Buffer, 0, KEY_READ, &hSymKey);
if (dwError != ERROR_SUCCESS)
break;
/* query for symbolic link */
dwKeyName = sizeof(SymBuffer);
SymBuffer[0] = L'\0';
dwError = RegQueryValueExW(hSymKey, L"SymbolicLink", NULL, NULL, (LPBYTE)SymBuffer, &dwKeyName);
if (dwError != ERROR_SUCCESS)
{
RegCloseKey(hSymKey);
break;
}
if (!wcsicmp(SymBuffer, DevicePath))
{
Ret = CreateDeviceInfo(list, InstancePath, &ClassId, &deviceInfo);
RegCloseKey(hSymKey);
RegCloseKey(hDevKey);
RegCloseKey(hKey);
if (Ret)
{
deviceInterface = HeapAlloc(GetProcessHeap(), 0, sizeof(struct DeviceInterface) + (wcslen(SymBuffer) + 1) * sizeof(WCHAR));
if (deviceInterface)
{
CopyMemory(&deviceInterface->InterfaceClassGuid, &ClassId, sizeof(GUID));
deviceInterface->DeviceInfo = deviceInfo;
deviceInterface->Flags = SPINT_ACTIVE; //FIXME
wcscpy(deviceInterface->SymbolicLink, SymBuffer);
InsertTailList(&deviceInfo->InterfaceListHead, &deviceInterface->ListEntry);
InsertTailList(&list->ListHead, &deviceInfo->ListEntry);
if (DeviceInterfaceData)
{
DeviceInterfaceData->Reserved = (ULONG_PTR)deviceInterface;
DeviceInterfaceData->Flags = deviceInterface->Flags;
CopyMemory(&DeviceInterfaceData->InterfaceClassGuid, &ClassId, sizeof(GUID));
}
else
{
Ret = FALSE;
SetLastError(ERROR_INVALID_USER_BUFFER);
}
}
}
else
{
HeapFree(GetProcessHeap(), 0, deviceInfo);
Ret = FALSE;
}
return Ret;
}
RegCloseKey(hSymKey);
dwSubIndex++;
}
RegCloseKey(hDevKey);
dwIndex++;
}while(TRUE);
RegCloseKey(hKey);
return FALSE; return FALSE;
} }

View file

@ -10,6 +10,7 @@
<define name="wcsnicmp">_wcsnicmp</define> <define name="wcsnicmp">_wcsnicmp</define>
<define name="_SETUPAPI_" /> <define name="_SETUPAPI_" />
<define name="_CFGMGR32_" />
<library>pnp_client</library> <library>pnp_client</library>
<library>uuid</library> <library>uuid</library>
<library>wine</library> <library>wine</library>

View file

@ -45,11 +45,6 @@
#include <pseh/pseh2.h> #include <pseh/pseh2.h>
/* This hack definition is necessary as long as setupapi
depends on Wine "compatibility" headers */
typedef ULONG RESOURCEID;
typedef RESOURCEID *PRESOURCEID;
#include <pnp_c.h> #include <pnp_c.h>
#include "rpc_private.h" #include "rpc_private.h"
#include "resource.h" #include "resource.h"
@ -61,6 +56,8 @@ typedef RESOURCEID *PRESOURCEID;
#define SETUP_DEVICE_INFO_SET_MAGIC 0xd00ff057 #define SETUP_DEVICE_INFO_SET_MAGIC 0xd00ff057
#define SETUP_CLASS_IMAGE_LIST_MAGIC 0xd00ff058 #define SETUP_CLASS_IMAGE_LIST_MAGIC 0xd00ff058
#define CMP_MAGIC 0x01234567
struct DeviceInterface /* Element of DeviceInfo.InterfaceListHead */ struct DeviceInterface /* Element of DeviceInfo.InterfaceListHead */
{ {
LIST_ENTRY ListEntry; LIST_ENTRY ListEntry;

View file

@ -522,7 +522,7 @@ GetThreadDesktop(
HDESK HDESK
WINAPI WINAPI
OpenDesktopA( OpenDesktopA(
LPSTR lpszDesktop, LPCSTR lpszDesktop,
DWORD dwFlags, DWORD dwFlags,
BOOL fInherit, BOOL fInherit,
ACCESS_MASK dwDesiredAccess) ACCESS_MASK dwDesiredAccess)
@ -558,7 +558,7 @@ OpenDesktopA(
HDESK HDESK
WINAPI WINAPI
OpenDesktopW( OpenDesktopW(
LPWSTR lpszDesktop, LPCWSTR lpszDesktop,
DWORD dwFlags, DWORD dwFlags,
BOOL fInherit, BOOL fInherit,
ACCESS_MASK dwDesiredAccess) ACCESS_MASK dwDesiredAccess)

View file

@ -18,7 +18,7 @@
* @implemented * @implemented
*/ */
HWINSTA WINAPI HWINSTA WINAPI
CreateWindowStationA(LPSTR lpwinsta, CreateWindowStationA(LPCSTR lpwinsta,
DWORD dwReserved, DWORD dwReserved,
ACCESS_MASK dwDesiredAccess, ACCESS_MASK dwDesiredAccess,
LPSECURITY_ATTRIBUTES lpsa) LPSECURITY_ATTRIBUTES lpsa)
@ -52,7 +52,7 @@ CreateWindowStationA(LPSTR lpwinsta,
* @implemented * @implemented
*/ */
HWINSTA WINAPI HWINSTA WINAPI
CreateWindowStationW(LPWSTR lpwinsta, CreateWindowStationW(LPCWSTR lpwinsta,
DWORD dwReserved, DWORD dwReserved,
ACCESS_MASK dwDesiredAccess, ACCESS_MASK dwDesiredAccess,
LPSECURITY_ATTRIBUTES lpsa) LPSECURITY_ATTRIBUTES lpsa)
@ -266,7 +266,7 @@ EnumWindowStationsW(WINSTAENUMPROCW EnumFunc,
* @implemented * @implemented
*/ */
HWINSTA WINAPI HWINSTA WINAPI
OpenWindowStationA(LPSTR lpszWinSta, OpenWindowStationA(LPCSTR lpszWinSta,
BOOL fInherit, BOOL fInherit,
ACCESS_MASK dwDesiredAccess) ACCESS_MASK dwDesiredAccess)
{ {
@ -298,7 +298,7 @@ OpenWindowStationA(LPSTR lpszWinSta,
* @implemented * @implemented
*/ */
HWINSTA WINAPI HWINSTA WINAPI
OpenWindowStationW(LPWSTR lpszWinSta, OpenWindowStationW(LPCWSTR lpszWinSta,
BOOL fInherit, BOOL fInherit,
ACCESS_MASK dwDesiredAccess) ACCESS_MASK dwDesiredAccess)
{ {

View file

@ -851,10 +851,6 @@ DefWndHandleWindowPosChanging(HWND hWnd, WINDOWPOS* Pos)
return 0; return 0;
} }
/* Undocumented flags. */
#define SWP_NOCLIENTMOVE 0x0800
#define SWP_NOCLIENTSIZE 0x1000
LRESULT LRESULT
DefWndHandleWindowPosChanged(HWND hWnd, WINDOWPOS* Pos) DefWndHandleWindowPosChanged(HWND hWnd, WINDOWPOS* Pos)
{ {

View file

@ -37,8 +37,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(user32);
/* GLOBALS *******************************************************************/ /* GLOBALS *******************************************************************/
#define DSS_DEFAULT 0x0040 /* Make it bold */
static const WORD wPattern_AA55[8] = { 0xaaaa, 0x5555, 0xaaaa, 0x5555, static const WORD wPattern_AA55[8] = { 0xaaaa, 0x5555, 0xaaaa, 0x5555,
0xaaaa, 0x5555, 0xaaaa, 0x5555 }; 0xaaaa, 0x5555, 0xaaaa, 0x5555 };

View file

@ -9,7 +9,7 @@
#pragma once #pragma once
#define NOEXTAPI #define NOEXTAPI
#include <ntddk.h> #include <ntifs.h>
#define NDEBUG #define NDEBUG
#include <halfuncs.h> #include <halfuncs.h>
#include <stdio.h> #include <stdio.h>

View file

@ -23,7 +23,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassUnload(PVOID ClassData) BatteryClassUnload(PVOID ClassData)
{ {
PBATTERY_CLASS_DATA BattClass = ClassData; PBATTERY_CLASS_DATA BattClass = ClassData;
@ -44,7 +44,7 @@ BatteryClassUnload(PVOID ClassData)
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassSystemControl(PVOID ClassData, BatteryClassSystemControl(PVOID ClassData,
PVOID WmiLibContext, PVOID WmiLibContext,
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
@ -58,7 +58,7 @@ BatteryClassSystemControl(PVOID ClassData,
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassQueryWmiDataBlock(PVOID ClassData, BatteryClassQueryWmiDataBlock(PVOID ClassData,
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp, PIRP Irp,
@ -74,7 +74,7 @@ BatteryClassQueryWmiDataBlock(PVOID ClassData,
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassStatusNotify(PVOID ClassData) BatteryClassStatusNotify(PVOID ClassData)
{ {
PBATTERY_CLASS_DATA BattClass = ClassData; PBATTERY_CLASS_DATA BattClass = ClassData;
@ -129,7 +129,7 @@ BatteryClassStatusNotify(PVOID ClassData)
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo, BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,
PVOID *ClassData) PVOID *ClassData)
{ {
@ -172,7 +172,7 @@ BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,
BCLASSAPI BCLASSAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
BatteryClassIoctl(PVOID ClassData, BatteryClassIoctl(PVOID ClassData,
PIRP Irp) PIRP Irp)
{ {

View file

@ -27,7 +27,7 @@ CompBattOpenClose(IN PDEVICE_OBJECT DeviceObject,
/* Complete the IRP with success */ /* Complete the IRP with success */
Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
IofCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
/* Return success */ /* Return success */
if (CompBattDebug & 0x100) DbgPrint("CompBatt: Exiting OpenClose\n"); if (CompBattDebug & 0x100) DbgPrint("CompBatt: Exiting OpenClose\n");
@ -56,7 +56,7 @@ CompBattSystemControl(IN PDEVICE_OBJECT DeviceObject,
/* We don't support WMI */ /* We don't support WMI */
Status = STATUS_NOT_SUPPORTED; Status = STATUS_NOT_SUPPORTED;
Irp->IoStatus.Status = STATUS_NOT_SUPPORTED; Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
IofCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
} }
/* Return status */ /* Return status */
@ -75,18 +75,47 @@ CompBattMonitorIrpComplete(IN PDEVICE_OBJECT DeviceObject,
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattMonitorIrpCompleteWorker(IN PCOMPBATT_BATTERY_ENTRY BatteryData) CompBattMonitorIrpCompleteWorker(IN PCOMPBATT_BATTERY_DATA BatteryData)
{ {
UNIMPLEMENTED; UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
NTSTATUS VOID
NTAPI NTAPI
CompBattRecalculateTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) CompBattRecalculateTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; PCOMPBATT_BATTERY_DATA BatteryData;
return STATUS_NOT_IMPLEMENTED; ULONG Tag;
PLIST_ENTRY ListHead, NextEntry;
if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING CompBattRecalculateTag\n");
/* Loop the battery list */
ExAcquireFastMutex(&DeviceExtension->Lock);
ListHead = &DeviceExtension->BatteryList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
/* Get the battery information and check if it has a tag */
BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink);
if (BatteryData->Flags & COMPBATT_TAG_ASSIGNED)
{
/* Generate the next tag and exit */
Tag = DeviceExtension->NextTag;
DeviceExtension->Flags |= COMPBATT_TAG_ASSIGNED;
DeviceExtension->Tag = Tag;
DeviceExtension->NextTag = Tag + 1;
break;
}
/* No tag for this device extension, clear it */
DeviceExtension->Tag = 0;
NextEntry = NextEntry->Flink;
}
/* We're done */
ExReleaseFastMutex(&DeviceExtension->Lock);
if (CompBattDebug & 0x100) DbgPrint("CompBatt: EXITING CompBattRecalculateTag\n");
} }
NTSTATUS NTSTATUS
@ -118,16 +147,61 @@ NTAPI
CompBattQueryTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, CompBattQueryTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
OUT PULONG Tag) OUT PULONG Tag)
{ {
UNIMPLEMENTED; NTSTATUS Status;
return STATUS_NOT_IMPLEMENTED; PAGED_CODE();
if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING QueryTag\n");
/* Was a tag assigned? */
if (!(DeviceExtension->Flags & COMPBATT_TAG_ASSIGNED))
{
/* Assign one */
CompBattRecalculateTag(DeviceExtension);
}
/* Do we have a tag now? */
if ((DeviceExtension->Flags & COMPBATT_TAG_ASSIGNED) && (DeviceExtension->Tag))
{
/* Return the tag */
*Tag = DeviceExtension->Tag;
Status = STATUS_SUCCESS;
}
else
{
/* No tag */
*Tag = 0;
Status = STATUS_NO_SUCH_DEVICE;
}
/* Return status */
if (CompBattDebug & 0x100) DbgPrint("CompBatt: EXITING QueryTag\n");
return Status;
} }
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattDisableStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) CompBattDisableStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; PCOMPBATT_BATTERY_DATA BatteryData;
return STATUS_NOT_IMPLEMENTED; PLIST_ENTRY ListHead, NextEntry;
if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING DisableStatusNotify\n");
/* Loop the battery list */
ExAcquireFastMutex(&DeviceExtension->Lock);
ListHead = &DeviceExtension->BatteryList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
/* Get the battery information and clear capacity data */
BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink);
BatteryData->WaitStatus.LowCapacity = 0;
BatteryData->WaitStatus.HighCapacity = 0x7FFFFFFF;
NextEntry = NextEntry->Flink;
}
/* Done */
ExReleaseFastMutex(&DeviceExtension->Lock);
if (CompBattDebug & 0x100) DbgPrint("CompBatt: EXITING DisableStatusNotify\n");
return STATUS_SUCCESS;
} }
NTSTATUS NTSTATUS
@ -161,11 +235,158 @@ CompBattQueryStatus(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattGetBatteryInformation(OUT PBATTERY_INFORMATION BatteryInformation, CompBattGetBatteryInformation(OUT PBATTERY_INFORMATION BatteryInfo,
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; NTSTATUS Status = STATUS_SUCCESS;
return STATUS_NOT_IMPLEMENTED; BATTERY_QUERY_INFORMATION InputBuffer;
PCOMPBATT_BATTERY_DATA BatteryData;
PLIST_ENTRY ListHead, NextEntry;
if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING GetBatteryInformation\n");
/* Set defaults */
BatteryInfo->DefaultAlert1 = 0;
BatteryInfo->DefaultAlert2 = 0;
BatteryInfo->CriticalBias = 0;
/* Loop the battery list */
ExAcquireFastMutex(&DeviceExtension->Lock);
ListHead = &DeviceExtension->BatteryList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
/* Try to acquire the remove lock */
BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink);
if (NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, 0)))
{
/* Now release the device lock since the battery can't go away */
ExReleaseFastMutex(&DeviceExtension->Lock);
/* Build the query */
InputBuffer.BatteryTag = BatteryData->Tag;
InputBuffer.InformationLevel = BatteryInformation;
InputBuffer.AtRate = 0;
/* Make sure the battery has a tag */
if (BatteryData->Tag)
{
/* Do we already have the data? */
if (!(BatteryData->Flags & COMPBATT_BATTERY_INFORMATION_PRESENT))
{
/* Send the IOCTL to query the information */
RtlZeroMemory(&BatteryData->BatteryInformation,
sizeof(BatteryData->BatteryInformation));
Status = BatteryIoctl(IOCTL_BATTERY_QUERY_INFORMATION,
BatteryData->DeviceObject,
&InputBuffer,
sizeof(InputBuffer),
&BatteryData->BatteryInformation,
sizeof(BatteryData->BatteryInformation),
0);
if (!NT_SUCCESS(Status))
{
/* Fail if the query had a problem */
if (Status == STATUS_DEVICE_REMOVED) Status = STATUS_NO_SUCH_DEVICE;
ExAcquireFastMutex(&DeviceExtension->Lock);
IoReleaseRemoveLock(&BatteryData->RemoveLock, 0);
break;
}
/* Next time we can use the static copy */
BatteryData->Flags |= COMPBATT_BATTERY_INFORMATION_PRESENT;
if (CompBattDebug & 2)
DbgPrint("CompBattGetBatteryInformation: Read individual BATTERY_INFORMATION\n"
"-------- Capabilities = %x\n-------- Technology = %x\n"
"-------- Chemistry[4] = %x\n-------- DesignedCapacity = %x\n"
"-------- FullChargedCapacity = %x\n-------- DefaultAlert1 = %x\n"
"-------- DefaultAlert2 = %x\n-------- CriticalBias = %x\n"
"-------- CycleCount = %x\n",
BatteryData->BatteryInformation.Capabilities,
BatteryData->BatteryInformation.Technology,
BatteryData->BatteryInformation.Chemistry,
BatteryData->BatteryInformation.DesignedCapacity,
BatteryData->BatteryInformation.FullChargedCapacity,
BatteryData->BatteryInformation.DefaultAlert1,
BatteryData->BatteryInformation.DefaultAlert2,
BatteryData->BatteryInformation.CriticalBias,
BatteryData->BatteryInformation.CycleCount);
}
/* Combine capabilities */
BatteryInfo->Capabilities |= BatteryData->BatteryInformation.Capabilities;
/* Add-on capacity */
if (BatteryData->BatteryInformation.DesignedCapacity != BATTERY_UNKNOWN_CAPACITY)
{
BatteryInfo->DesignedCapacity += BatteryData->BatteryInformation.DesignedCapacity;
}
/* Add on fully charged capacity */
if (BatteryData->BatteryInformation.FullChargedCapacity != BATTERY_UNKNOWN_CAPACITY)
{
BatteryInfo->FullChargedCapacity += BatteryData->BatteryInformation.FullChargedCapacity;
}
/* Choose the highest alert */
BatteryInfo->DefaultAlert1 = max(BatteryInfo->DefaultAlert1,
BatteryData->BatteryInformation.DefaultAlert1);
/* Choose the highest alert */
BatteryInfo->DefaultAlert2 = max(BatteryInfo->DefaultAlert2,
BatteryData->BatteryInformation.DefaultAlert2);
/* Choose the highest critical bias */
BatteryInfo->CriticalBias = max(BatteryInfo->CriticalBias,
BatteryData->BatteryInformation.CriticalBias);
}
/* Re-acquire the device extension lock and release the remove lock */
ExAcquireFastMutex(&DeviceExtension->Lock);
IoReleaseRemoveLock(&BatteryData->RemoveLock, 0);
}
/* Next entry */
NextEntry = NextEntry->Flink;
}
/* We are done with the list, check if the information was queried okay */
ExReleaseFastMutex(&DeviceExtension->Lock);
if (NT_SUCCESS(Status))
{
/* If there's no fully charged capacity, use the design capacity */
if (!BatteryInfo->FullChargedCapacity)
{
BatteryInfo->FullChargedCapacity = BatteryInfo->DesignedCapacity;
}
/* Print out final combined data */
if (CompBattDebug & 2)
DbgPrint("CompBattGetBatteryInformation: Returning BATTERY_INFORMATION\n"
"-------- Capabilities = %x\n-------- Technology = %x\n"
"-------- Chemistry[4] = %x\n-------- DesignedCapacity = %x\n"
"-------- FullChargedCapacity = %x\n-------- DefaultAlert1 = %x\n"
"-------- DefaultAlert2 = %x\n-------- CriticalBias = %x\n"
"-------- CycleCount = %x\n",
BatteryInfo->Capabilities,
BatteryInfo->Technology,
BatteryInfo->Chemistry,
BatteryInfo->DesignedCapacity,
BatteryInfo->FullChargedCapacity,
BatteryInfo->DefaultAlert1,
BatteryInfo->DefaultAlert2,
BatteryInfo->CriticalBias,
BatteryInfo->CycleCount);
/* Copy the data into the device extension */
RtlCopyMemory(&DeviceExtension->BatteryInformation,
BatteryInfo,
sizeof(DeviceExtension->BatteryInformation));
DeviceExtension->Flags |= COMPBATT_BATTERY_INFORMATION_PRESENT;
}
/* We are done */
if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING GetBatteryInformation\n");
return Status;
} }
NTSTATUS NTSTATUS
@ -173,8 +394,85 @@ NTAPI
CompBattGetBatteryGranularity(OUT PBATTERY_REPORTING_SCALE ReportingScale, CompBattGetBatteryGranularity(OUT PBATTERY_REPORTING_SCALE ReportingScale,
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; NTSTATUS Status = STATUS_SUCCESS;
return STATUS_NOT_IMPLEMENTED; BATTERY_QUERY_INFORMATION InputBuffer;
PCOMPBATT_BATTERY_DATA BatteryData;
BATTERY_REPORTING_SCALE BatteryScale[4];
PLIST_ENTRY ListHead, NextEntry;
ULONG i;
if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING GetBatteryGranularity\n");
/* Set defaults */
ReportingScale[0].Granularity = -1;
ReportingScale[1].Granularity = -1;
ReportingScale[2].Granularity = -1;
ReportingScale[3].Granularity = -1;
/* Loop the battery list */
ExAcquireFastMutex(&DeviceExtension->Lock);
ListHead = &DeviceExtension->BatteryList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
/* Try to acquire the remove lock */
BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink);
if (NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, 0)))
{
/* Now release the device lock since the battery can't go away */
ExReleaseFastMutex(&DeviceExtension->Lock);
/* Build the query */
InputBuffer.BatteryTag = BatteryData->Tag;
InputBuffer.InformationLevel = BatteryGranularityInformation;
/* Make sure the battery has a tag */
if (BatteryData->Tag)
{
/* Send the IOCTL to query the information */
RtlZeroMemory(&BatteryData->BatteryInformation,
sizeof(BatteryData->BatteryInformation));
Status = BatteryIoctl(IOCTL_BATTERY_QUERY_INFORMATION,
BatteryData->DeviceObject,
&InputBuffer,
sizeof(InputBuffer),
&BatteryScale,
sizeof(BatteryScale),
0);
if (!NT_SUCCESS(Status))
{
/* Fail if the query had a problem */
ExAcquireFastMutex(&DeviceExtension->Lock);
IoReleaseRemoveLock(&BatteryData->RemoveLock, 0);
break;
}
/* Loop all 4 scales */
for (i = 0; i < 4; i++)
{
/* Check for valid granularity */
if (BatteryScale[i].Granularity)
{
/* If it's smaller, use it instead */
ReportingScale[i].Granularity = min(BatteryScale[i].Granularity,
ReportingScale[i].Granularity);
}
}
}
/* Re-acquire the device extension lock and release the remove lock */
ExAcquireFastMutex(&DeviceExtension->Lock);
IoReleaseRemoveLock(&BatteryData->RemoveLock, 0);
}
/* Next entry */
NextEntry = NextEntry->Flink;
}
/* All done */
ExReleaseFastMutex(&DeviceExtension->Lock);
if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING GetBatteryGranularity\n");
return STATUS_SUCCESS;
} }
NTSTATUS NTSTATUS
@ -188,7 +486,7 @@ CompBattGetEstimatedTime(OUT PULONG Time,
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattQueryInformation(IN PCOMPBATT_DEVICE_EXTENSION FdoExtension, CompBattQueryInformation(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
IN ULONG Tag, IN ULONG Tag,
IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel, IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel,
IN OPTIONAL LONG AtRate, IN OPTIONAL LONG AtRate,
@ -196,8 +494,109 @@ CompBattQueryInformation(IN PCOMPBATT_DEVICE_EXTENSION FdoExtension,
IN ULONG BufferLength, IN ULONG BufferLength,
OUT PULONG ReturnedLength) OUT PULONG ReturnedLength)
{ {
UNIMPLEMENTED; BATTERY_INFORMATION BatteryInfo;
return STATUS_NOT_IMPLEMENTED; BATTERY_REPORTING_SCALE BatteryGranularity[4];
PWCHAR BatteryName = L"Composite Battery";
BATTERY_MANUFACTURE_DATE Date;
ULONG Dummy, Time;
PVOID QueryData = NULL;
ULONG QueryLength = 0;
NTSTATUS Status = STATUS_SUCCESS;
PAGED_CODE();
if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING QueryInformation\n");
/* Check for valid/correct tag */
if ((Tag != DeviceExtension->Tag) ||
(!(DeviceExtension->Flags & COMPBATT_TAG_ASSIGNED)))
{
/* Not right, so fail */
return STATUS_NO_SUCH_DEVICE;
}
/* Check what caller wants */
switch (InfoLevel)
{
case BatteryInformation:
/* Query combined battery information */
RtlZeroMemory(&BatteryInfo, sizeof(BatteryInfo));
Status = CompBattGetBatteryInformation(&BatteryInfo, DeviceExtension);
if (NT_SUCCESS(Status))
{
/* Return the data if successful */
QueryData = &BatteryInfo;
QueryLength = sizeof(BatteryInfo);
}
break;
case BatteryGranularityInformation:
/* Query combined granularity information */
RtlZeroMemory(&BatteryGranularity, sizeof(BatteryGranularity));
Status = CompBattGetBatteryGranularity(BatteryGranularity, DeviceExtension);
if (NT_SUCCESS(Status))
{
/* Return the data if successful */
QueryLength = sizeof(BatteryGranularity);
QueryData = &BatteryGranularity;
}
break;
case BatteryEstimatedTime:
/* Query combined time estimate information */
RtlZeroMemory(&Time, sizeof(Time));
Status = CompBattGetEstimatedTime(&Time, DeviceExtension);
if (NT_SUCCESS(Status))
{
/* Return the data if successful */
QueryLength = sizeof(Time);
QueryData = &Time;
}
break;
case BatteryManufactureName:
case BatteryDeviceName:
/* Return the static buffer */
QueryData = BatteryName;
QueryLength = sizeof(L"Composite Battery");
break;
case BatteryManufactureDate:
/* Static data */
Date.Day = 26;
Date.Month = 06;
Date.Year = 1997;
break;
case BatteryTemperature:
case BatteryUniqueID:
/* Return zero */
Dummy = 0;
QueryData = &Dummy;
QueryLength = sizeof(Dummy);
break;
default:
/* Everything else is unknown */
Status = STATUS_INVALID_PARAMETER;
break;
}
/* Return the required length and check if the caller supplied enough */
*ReturnedLength = QueryLength;
if (BufferLength < QueryLength) Status = STATUS_BUFFER_TOO_SMALL;
/* Copy the data if there's enough space and it exists */
if ((NT_SUCCESS(Status)) && (QueryData)) RtlCopyMemory(Buffer, QueryData, QueryLength);
/* Return function result */
if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING QueryInformation\n");
return Status;
} }
NTSTATUS NTSTATUS
@ -209,13 +608,12 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject,
DriverObject->DriverExtension->AddDevice = CompBattAddDevice; DriverObject->DriverExtension->AddDevice = CompBattAddDevice;
/* Register other handlers */ /* Register other handlers */
DriverObject->MajorFunction[0] = CompBattOpenClose; DriverObject->MajorFunction[IRP_MJ_CREATE] = CompBattOpenClose;
DriverObject->MajorFunction[2] = CompBattOpenClose; DriverObject->MajorFunction[IRP_MJ_CLOSE] = CompBattOpenClose;
DriverObject->MajorFunction[14] = CompBattIoctl; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = CompBattIoctl;
DriverObject->MajorFunction[22] = CompBattPowerDispatch; DriverObject->MajorFunction[IRP_MJ_POWER] = CompBattPowerDispatch;
DriverObject->MajorFunction[23] = CompBattSystemControl; DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = CompBattSystemControl;
DriverObject->MajorFunction[27] = CompBattPnpDispatch; DriverObject->MajorFunction[IRP_MJ_PNP] = CompBattPnpDispatch;
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -10,8 +10,12 @@
#include <initguid.h> #include <initguid.h>
#include <batclass.h> #include <batclass.h>
#include <debug.h> #include <debug.h>
#include <wdmguid.h>
typedef struct _COMPBATT_BATTERY_ENTRY #define COMPBATT_BATTERY_INFORMATION_PRESENT 0x04
#define COMPBATT_TAG_ASSIGNED 0x80
typedef struct _COMPBATT_BATTERY_DATA
{ {
LIST_ENTRY BatteryLink; LIST_ENTRY BatteryLink;
IO_REMOVE_LOCK RemoveLock; IO_REMOVE_LOCK RemoveLock;
@ -31,7 +35,7 @@ typedef struct _COMPBATT_BATTERY_ENTRY
BATTERY_STATUS BatteryStatus; BATTERY_STATUS BatteryStatus;
ULONGLONG InterruptTime; ULONGLONG InterruptTime;
UNICODE_STRING BatteryName; UNICODE_STRING BatteryName;
} COMPBATT_BATTERY_ENTRY, *PCOMPBATT_BATTERY_ENTRY; } COMPBATT_BATTERY_DATA, *PCOMPBATT_BATTERY_DATA;
typedef struct _COMPBATT_DEVICE_EXTENSION typedef struct _COMPBATT_DEVICE_EXTENSION
{ {
@ -114,6 +118,41 @@ CompBattQueryTag(
OUT PULONG Tag OUT PULONG Tag
); );
NTSTATUS
NTAPI
CompBattMonitorIrpComplete(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PKEVENT Event
);
NTSTATUS
NTAPI
CompBattMonitorIrpCompleteWorker(
IN PCOMPBATT_BATTERY_DATA BatteryData
);
NTSTATUS
NTAPI
CompBattGetDeviceObjectPointer(
IN PUNICODE_STRING DeviceName,
IN ACCESS_MASK DesiredAccess,
OUT PFILE_OBJECT *FileObject,
OUT PDEVICE_OBJECT *DeviceObject
);
NTSTATUS
NTAPI
BatteryIoctl(
IN ULONG IoControlCode,
IN PDEVICE_OBJECT DeviceObject,
IN PVOID InputBuffer,
IN ULONG InputBufferLength,
IN PVOID OutputBuffer,
IN ULONG OutputBufferLength,
IN BOOLEAN InternalDeviceIoControl
);
extern ULONG CompBattDebug; extern ULONG CompBattDebug;
/* EOF */ /* EOF */

View file

@ -22,19 +22,102 @@ BatteryIoctl(IN ULONG IoControlCode,
IN ULONG OutputBufferLength, IN ULONG OutputBufferLength,
IN BOOLEAN InternalDeviceIoControl) IN BOOLEAN InternalDeviceIoControl)
{ {
UNIMPLEMENTED; IO_STATUS_BLOCK IoStatusBlock;
return STATUS_NOT_IMPLEMENTED; KEVENT Event;
NTSTATUS Status;
PIRP Irp;
PAGED_CODE();
if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING BatteryIoctl\n");
/* Initialize the event and IRP */
KeInitializeEvent(&Event, SynchronizationEvent, 0);
Irp = IoBuildDeviceIoControlRequest(IoControlCode,
DeviceObject,
InputBuffer,
InputBufferLength,
OutputBuffer,
OutputBufferLength,
InternalDeviceIoControl,
&Event,
&IoStatusBlock);
if (Irp)
{
/* Call the class driver miniport */
Status = IofCallDriver(DeviceObject, Irp);
if (Status == STATUS_PENDING)
{
/* Wait for result */
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
Status = IoStatusBlock.Status;
}
/* Print failure */
if (!(NT_SUCCESS(Status)) && (CompBattDebug & 8))
DbgPrint("BatteryIoctl: Irp failed - %x\n", Status);
/* Done */
if (CompBattDebug & 0x100) DbgPrint("CompBatt: EXITING BatteryIoctl\n");
}
else
{
/* Out of memory */
if (CompBattDebug & 8) DbgPrint("BatteryIoctl: couldn't create Irp\n");
Status = STATUS_INSUFFICIENT_RESOURCES;
}
/* Return status */
return Status;
} }
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattGetDeviceObjectPointer(IN PCUNICODE_STRING DeviceName, CompBattGetDeviceObjectPointer(IN PUNICODE_STRING DeviceName,
IN ACCESS_MASK DesiredAccess, IN ACCESS_MASK DesiredAccess,
OUT PFILE_OBJECT *FileObject, OUT PFILE_OBJECT *FileObject,
OUT PDEVICE_OBJECT *DeviceObject) OUT PDEVICE_OBJECT *DeviceObject)
{ {
UNIMPLEMENTED; NTSTATUS Status;
return STATUS_NOT_IMPLEMENTED; OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK IoStatusBlock;
PFILE_OBJECT LocalFileObject;
HANDLE DeviceHandle;
PAGED_CODE();
/* Open a file object handle to the device */
InitializeObjectAttributes(&ObjectAttributes, DeviceName, 0, NULL, NULL);
Status = ZwCreateFile(&DeviceHandle,
DesiredAccess,
&ObjectAttributes,
&IoStatusBlock,
NULL,
0,
FILE_SHARE_READ | FILE_SHARE_WRITE,
FILE_OPEN,
0,
NULL,
0);
if (NT_SUCCESS(Status))
{
/* Reference the file object */
Status = ObReferenceObjectByHandle(DeviceHandle,
0,
IoFileObjectType,
KernelMode,
(PVOID)&LocalFileObject,
NULL);
if (NT_SUCCESS(Status))
{
/* Return the FO and the associated DO */
*FileObject = LocalFileObject;
*DeviceObject = IoGetRelatedDeviceObject(LocalFileObject);
}
/* Close the handle */
ZwClose(DeviceHandle);
}
/* Return status */
return Status;
} }
/* EOF */ /* EOF */

View file

@ -28,13 +28,46 @@ CompBattPowerDispatch(IN PDEVICE_OBJECT DeviceObject,
return PoCallDriver(DeviceExtension->AttachedDevice, Irp); return PoCallDriver(DeviceExtension->AttachedDevice, Irp);
} }
PCOMPBATT_BATTERY_ENTRY PCOMPBATT_BATTERY_DATA
NTAPI NTAPI
RemoveBatteryFromList(IN PCUNICODE_STRING BatteryName, RemoveBatteryFromList(IN PCUNICODE_STRING BatteryName,
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; PLIST_ENTRY ListHead, NextEntry;
return NULL; PCOMPBATT_BATTERY_DATA BatteryData;
if (CompBattDebug & 1)
DbgPrint("CompBatt: ENTERING RemoveBatteryFromList\n");
/* Loop the battery list */
ExAcquireFastMutex(&DeviceExtension->Lock);
ListHead = &DeviceExtension->BatteryList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
/* Get the battery information and compare the name */
BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink);
if (!RtlCompareUnicodeString(BatteryName, &BatteryData->BatteryName, TRUE))
{
/* Flush pending deletes and any lock waiters */
IoAcquireRemoveLock(&BatteryData->RemoveLock, 0);
ExReleaseFastMutex(&DeviceExtension->Lock);
IoReleaseRemoveLockAndWait(&BatteryData->RemoveLock, 0);
/* Remove the entry from the list */
ExAcquireFastMutex(&DeviceExtension->Lock);
RemoveEntryList(&BatteryData->BatteryLink);
ExReleaseFastMutex(&DeviceExtension->Lock);
return BatteryData;
}
/* Next */
NextEntry = NextEntry->Flink;
}
/* Done */
ExReleaseFastMutex(&DeviceExtension->Lock);
if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING RemoveBatteryFromList\n");
return STATUS_SUCCESS;
} }
BOOLEAN BOOLEAN
@ -42,17 +75,143 @@ NTAPI
IsBatteryAlreadyOnList(IN PCUNICODE_STRING BatteryName, IsBatteryAlreadyOnList(IN PCUNICODE_STRING BatteryName,
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; PLIST_ENTRY ListHead, NextEntry;
return FALSE; PCOMPBATT_BATTERY_DATA BatteryData;
BOOLEAN Found = FALSE;
if (CompBattDebug & 1)
DbgPrint("CompBatt: ENTERING IsBatteryAlreadyOnList\n");
/* Loop the battery list */
ExAcquireFastMutex(&DeviceExtension->Lock);
ListHead = &DeviceExtension->BatteryList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
/* Get the battery information and compare the name */
BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink);
if (!RtlCompareUnicodeString(BatteryName, &BatteryData->BatteryName, TRUE))
{
/* Got it */
Found = TRUE;
break;
}
/* Next */
NextEntry = NextEntry->Flink;
}
/* Release the lock and return search status */
ExReleaseFastMutex(&DeviceExtension->Lock);
if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING IsBatteryAlreadyOnList\n");
return Found;
} }
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattAddNewBattery(IN PCUNICODE_STRING BatteryName, CompBattAddNewBattery(IN PUNICODE_STRING BatteryName,
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; NTSTATUS Status = STATUS_SUCCESS;
return STATUS_NOT_IMPLEMENTED; PCOMPBATT_BATTERY_DATA BatteryData;
PIRP Irp;
PIO_STACK_LOCATION IoStackLocation;
PFILE_OBJECT FileObject;
PAGED_CODE();
if (CompBattDebug & 1)
DbgPrint("CompBatt: ENTERING AddNewBattery \"%w\" \n", BatteryName->Buffer);
/* Is this a new battery? */
if (!IsBatteryAlreadyOnList(BatteryName, DeviceExtension))
{
/* Allocate battery data */
BatteryData = ExAllocatePoolWithTag(NonPagedPool,
sizeof(COMPBATT_BATTERY_DATA) +
BatteryName->Length,
'CtaB');
if (BatteryData)
{
/* Initialize the data and write the battery name */
RtlZeroMemory(BatteryData, sizeof(COMPBATT_BATTERY_DATA));
BatteryData->Tag = 0;
BatteryData->BatteryName.MaximumLength = BatteryName->Length;
BatteryData->BatteryName.Buffer = (PWCHAR)(BatteryData + 1);
RtlCopyUnicodeString(&BatteryData->BatteryName, BatteryName);
/* Get the device object */
Status = CompBattGetDeviceObjectPointer(BatteryName,
FILE_ALL_ACCESS,
&FileObject,
&BatteryData->DeviceObject);
if (NT_SUCCESS(Status))
{
/* Reference the DO and drop the FO */
ObfReferenceObject(BatteryData->DeviceObject);
ObfDereferenceObject(FileObject);
/* Allocate the battery IRP */
Irp = IoAllocateIrp(BatteryData->DeviceObject->StackSize + 1, 0);
if (Irp)
{
/* Save it */
BatteryData->Irp = Irp;
/* Setup the stack location */
IoStackLocation = IoGetNextIrpStackLocation(Irp);
IoStackLocation->Parameters.Others.Argument1 = DeviceExtension;
IoStackLocation->Parameters.Others.Argument2 = BatteryData;
/* Set IRP data */
IoSetNextIrpStackLocation(Irp);
Irp->IoStatus.Status = STATUS_DEVICE_NOT_CONNECTED;
BatteryData->WaitFlag = 0;
/* Insert this battery in the list */
ExAcquireFastMutex(&DeviceExtension->Lock);
InsertTailList(&DeviceExtension->BatteryList,
&BatteryData->BatteryLink);
ExReleaseFastMutex(&DeviceExtension->Lock);
/* Initialize the work item and delete lock */
IoInitializeRemoveLock(&BatteryData->RemoveLock, 0, 0, 0);
ExInitializeWorkItem(&BatteryData->WorkItem,
(PVOID)CompBattMonitorIrpCompleteWorker,
BatteryData);
/* Setup the IRP work entry */
CompBattMonitorIrpComplete(BatteryData->DeviceObject, Irp, 0);
Status = STATUS_SUCCESS;
}
else
{
/* Fail, no memory */
if (CompBattDebug & 8)
DbgPrint("CompBatt: Couldn't allocate new battery Irp\n");
Status = STATUS_INSUFFICIENT_RESOURCES;
ObfDereferenceObject(BatteryData->DeviceObject);
}
}
else if (CompBattDebug & 8)
{
/* Fail */
DbgPrint("CompBattAddNewBattery: Failed to get device Object. status = %lx\n",
Status);
}
/* Free the battery data */
ExFreePool(BatteryData);
}
else
{
/* Fail, no memory */
if (CompBattDebug & 8)
DbgPrint("CompBatt: Couldn't allocate new battery node\n");
Status = STATUS_INSUFFICIENT_RESOURCES;
}
}
/* We're done */
if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING AddNewBattery\n");
return Status;
} }
NTSTATUS NTSTATUS
@ -60,16 +219,65 @@ NTAPI
CompBattRemoveBattery(IN PCUNICODE_STRING BatteryName, CompBattRemoveBattery(IN PCUNICODE_STRING BatteryName,
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; PCOMPBATT_BATTERY_DATA BatteryData;
return STATUS_NOT_IMPLEMENTED; if (CompBattDebug & 1) DbgPrint("CompBatt: RemoveBattery\n");
/* Remove the entry */
BatteryData = RemoveBatteryFromList(BatteryName, DeviceExtension);
if (BatteryData)
{
/* Dereference and free it */
ObfDereferenceObject(BatteryData->DeviceObject);
ExFreePool(BatteryData);
/* Notify class driver */
DeviceExtension->Flags = 0;
BatteryClassStatusNotify(DeviceExtension->ClassData);
}
/* It's done */
return STATUS_SUCCESS;
} }
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattGetBatteries(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) CompBattGetBatteries(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; PWCHAR p;
return STATUS_NOT_IMPLEMENTED; NTSTATUS Status;
PWCHAR LinkList;
UNICODE_STRING LinkString;
if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING GetBatteries\n");
/* Get all battery links */
Status = IoGetDeviceInterfaces(&GUID_DEVICE_BATTERY, NULL, 0, &LinkList);
p = LinkList;
if (NT_SUCCESS(Status))
{
/* Loop all strings inside */
while (TRUE)
{
/* Create the string */
RtlInitUnicodeString(&LinkString, p);
if (!LinkString.Length) break;
/* Add this battery and move on */
Status = CompBattAddNewBattery(&LinkString, DeviceExtension);
p += (LinkString.Length / sizeof(WCHAR)) + sizeof(UNICODE_NULL);
}
/* Parsing complete, clean up buffer */
ExFreePool(LinkList);
}
else if (CompBattDebug & 8)
{
/* Fail */
DbgPrint("CompBatt: Couldn't get list of batteries\n");
}
/* Done */
if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING GetBatteries\n");
return Status;
} }
NTSTATUS NTSTATUS
@ -77,8 +285,32 @@ NTAPI
CompBattPnpEventHandler(IN PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification, CompBattPnpEventHandler(IN PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification,
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension)
{ {
UNIMPLEMENTED; if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING PnpEventHandler\n");
return STATUS_NOT_IMPLEMENTED; if (CompBattDebug & 2) DbgPrint("CompBatt: Received device interface change notification\n");
/* Check what happened */
if (IsEqualGUIDAligned(&Notification->Event, &GUID_DEVICE_INTERFACE_ARRIVAL))
{
/* Add the new battery */
if (CompBattDebug & 2)
DbgPrint("CompBatt: Received notification of battery arrival\n");
CompBattAddNewBattery(Notification->SymbolicLinkName, DeviceExtension);
}
else if (IsEqualGUIDAligned(&Notification->Event, &GUID_DEVICE_INTERFACE_REMOVAL))
{
/* Don't do anything */
if (CompBattDebug & 2)
DbgPrint("CompBatt: Received notification of battery removal\n");
}
else
{
/* Shouldn't happen */
if (CompBattDebug & 2) DbgPrint("CompBatt: Received unhandled PnP event\n");
}
/* Done, return success */
if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING PnpEventHandler\n");
return STATUS_SUCCESS;
} }
NTSTATUS NTSTATUS
@ -251,7 +483,7 @@ CompBattPnpDispatch(IN PDEVICE_OBJECT DeviceObject,
{ {
/* Complete the request */ /* Complete the request */
Status = Irp->IoStatus.Status; Status = Irp->IoStatus.Status;
IofCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
} }
/* Release the remove lock and return status */ /* Release the remove lock and return status */

View file

@ -1,10 +1,10 @@
/* DDK/NDK/SDK Headers */ /* DDK/NDK/SDK Headers */
#include <ddk/ntddk.h> #include <ntddk.h>
#include <ddk/ntddmou.h> #include <ntddmou.h>
#include <ddk/ntifs.h> #include <ntifs.h>
#include <ddk/tvout.h> #include <tvout.h>
#include <ndk/ntndk.h> #include <ntndk.h>
#include <stdarg.h> #include <stdarg.h>
#include <windef.h> #include <windef.h>
@ -16,7 +16,7 @@
#include <dde.h> #include <dde.h>
#include <ddk/ddkmapi.h> #include <ddkmapi.h>
/* Prototypes */ /* Prototypes */
VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer); VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer);

View file

@ -1,9 +1,9 @@
/* DDK/NDK/SDK Headers */ /* DDK/NDK/SDK Headers */
#include <ddk/ntddk.h> #include <ntddk.h>
#include <ddk/ntddmou.h> #include <ntddmou.h>
#include <ddk/ntifs.h> #include <ntifs.h>
#include <ddk/tvout.h> #include <tvout.h>
#include <ndk/ntndk.h> #include <ntndk.h>
/* Win32 Headers */ /* Win32 Headers */
#define WINBASEAPI #define WINBASEAPI

View file

@ -42,8 +42,11 @@ typedef unsigned char BYTE;
/* REACTOS FIXME */ /* REACTOS FIXME */
#undef DeleteFile #undef DeleteFile
/* This is deprecated and should be changed in the EXT2FS driver. */ /* This is deprecated and should be changed in the EXT2FS driver. */
/* FIXME : Those two definitions already exist in wdm.h
#define RtlLargeIntegerLessThan(a, b) (a).QuadPart < (b).QuadPart #define RtlLargeIntegerLessThan(a, b) (a).QuadPart < (b).QuadPart
#define RtlLargeIntegerGreaterThan(a, b) (a).QuadPart > (b).QuadPart #define RtlLargeIntegerGreaterThan(a, b) (a).QuadPart > (b).QuadPart
*/
// the following include files should be in the inc sub-dir associated with this driver // the following include files should be in the inc sub-dir associated with this driver

View file

@ -127,7 +127,7 @@ KsAddItemToObjectBag(
BagEntry->Free = ExFreePool; BagEntry->Free = ExFreePool;
/* insert item */ /* insert item */
InsertTailList(&Bag->ObjectList, &Bag->Entry); InsertTailList(&Bag->ObjectList, &BagEntry->Entry);
/* release mutex */ /* release mutex */
KeReleaseMutex(Bag->BagMutex, FALSE); KeReleaseMutex(Bag->BagMutex, FALSE);

View file

@ -74,7 +74,7 @@ IKsDevice_fnInitializeObjectBag(
if (!Mutex) if (!Mutex)
{ {
/* use device mutex */ /* use device mutex */
Mutex = &This->DeviceMutex; Mutex = &This->BagMutex;
} }
/* initialize object bag */ /* initialize object bag */
@ -220,12 +220,10 @@ IKsDevice_PnpPostStart(
PPNP_POSTSTART_CONTEXT Ctx = (PPNP_POSTSTART_CONTEXT)Context; PPNP_POSTSTART_CONTEXT Ctx = (PPNP_POSTSTART_CONTEXT)Context;
/* call driver pnp post routine */ /* call driver pnp post routine */
Status = Ctx->DeviceHeader->Descriptor->Dispatch->PostStart(&Ctx->DeviceHeader->KsDevice); Status = Ctx->DeviceHeader->KsDevice.Descriptor->Dispatch->PostStart(&Ctx->DeviceHeader->KsDevice);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT1("Driver: PostStart Routine returned %x\n", Status);
/* set state to disabled */ /* set state to disabled */
Ctx->DeviceHeader->TargetState = KSTARGET_STATE_DISABLED; Ctx->DeviceHeader->TargetState = KSTARGET_STATE_DISABLED;
} }
@ -233,6 +231,7 @@ IKsDevice_PnpPostStart(
{ {
/* set state to enabled */ /* set state to enabled */
Ctx->DeviceHeader->TargetState = KSTARGET_STATE_ENABLED; Ctx->DeviceHeader->TargetState = KSTARGET_STATE_ENABLED;
Status = KspSetFilterFactoriesState(Ctx->DeviceHeader, TRUE);
} }
/* free work item */ /* free work item */
@ -240,6 +239,8 @@ IKsDevice_PnpPostStart(
/* free work context */ /* free work context */
FreeItem(Ctx); FreeItem(Ctx);
DPRINT("IKsDevice_PnpPostStart: PostStart Routine returned %x\n", Status);
} }
NTSTATUS NTSTATUS
@ -253,6 +254,10 @@ IKsDevice_PnpStartDevice(
PKSIDEVICE_HEADER DeviceHeader; PKSIDEVICE_HEADER DeviceHeader;
PPNP_POSTSTART_CONTEXT Ctx = NULL; PPNP_POSTSTART_CONTEXT Ctx = NULL;
NTSTATUS Status; NTSTATUS Status;
PCM_RESOURCE_LIST TranslatedResourceList;
PCM_RESOURCE_LIST UntranslatedResourceList;
PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor, UnPartialDescriptor;
ULONG Index;
/* get current stack location */ /* get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
@ -261,6 +266,8 @@ IKsDevice_PnpStartDevice(
/* get device header */ /* get device header */
DeviceHeader = DeviceExtension->DeviceHeader; DeviceHeader = DeviceExtension->DeviceHeader;
DPRINT("IKsDevice_PnpStartDevice DeviceHeader %p\n", DeviceHeader);
/* first forward irp to lower device object */ /* first forward irp to lower device object */
Status = KspForwardIrpSynchronous(DeviceObject, Irp); Status = KspForwardIrpSynchronous(DeviceObject, Irp);
@ -273,20 +280,55 @@ IKsDevice_PnpStartDevice(
return Status; return Status;
} }
TranslatedResourceList = IoStack->Parameters.StartDevice.AllocatedResourcesTranslated;
UntranslatedResourceList = IoStack->Parameters.StartDevice.AllocatedResources;
DPRINT("ResourceDescriptorCount %lu\n", TranslatedResourceList->List[0].PartialResourceList.Count);
for (Index = 0; Index < TranslatedResourceList->List[0].PartialResourceList.Count; Index ++ )
{
PartialDescriptor = &TranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[Index];
UnPartialDescriptor = &UntranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[Index];
DPRINT("Descriptor Type %u\n", PartialDescriptor->Type);
if (PartialDescriptor->Type == CmResourceTypeInterrupt)
{
DPRINT("CmResourceTypeInterrupt Index %u TRANS Interrupt Number Affinity %x Level %u Vector %u Flags %x Share %x\n", Index, PartialDescriptor->u.Interrupt.Affinity, PartialDescriptor->u.Interrupt.Level, PartialDescriptor->u.Interrupt.Vector, PartialDescriptor->Flags, PartialDescriptor->ShareDisposition);
DPRINT("CmResourceTypeInterrupt Index %u UNTRANS Interrupt Number Affinity %x Level %u Vector %u Flags %x Share %x\\n", Index, UnPartialDescriptor->u.Interrupt.Affinity, UnPartialDescriptor->u.Interrupt.Level, UnPartialDescriptor->u.Interrupt.Vector, UnPartialDescriptor->Flags, UnPartialDescriptor->ShareDisposition);
}
else if (PartialDescriptor->Type == CmResourceTypePort)
{
DPRINT("CmResourceTypePort Index %u TRANS Port Length %u Start %u %u Flags %x Share %x\n", Index, PartialDescriptor->u.Port.Length, PartialDescriptor->u.Port.Start.HighPart, PartialDescriptor->u.Port.Start.LowPart, PartialDescriptor->Flags, PartialDescriptor->ShareDisposition);
DPRINT("CmResourceTypePort Index %u UNTRANS Port Length %u Start %u %u Flags %x Share %x\n", Index, UnPartialDescriptor->u.Port.Length, UnPartialDescriptor->u.Port.Start.HighPart, UnPartialDescriptor->u.Port.Start.LowPart, UnPartialDescriptor->Flags, UnPartialDescriptor->ShareDisposition);
}
else if (PartialDescriptor->Type == CmResourceTypeMemory)
{
DPRINT("CmResourceTypeMemory Index %u TRANS Start %x Length %u Flags %x Share %x\n", Index, PartialDescriptor->u.Memory.Start.LowPart, PartialDescriptor->u.Memory.Length, PartialDescriptor->Flags, PartialDescriptor->ShareDisposition);
DPRINT("CmResourceTypeMemory Index %u TRANS Start %x Length %u Flags %x Share %x\n", Index, UnPartialDescriptor->u.Memory.Start.LowPart, UnPartialDescriptor->u.Memory.Length, UnPartialDescriptor->Flags, UnPartialDescriptor->ShareDisposition);
}
}
ASSERT(DeviceHeader->KsDevice.Descriptor);
ASSERT(DeviceHeader->KsDevice.Descriptor->Dispatch);
ASSERT(DeviceHeader->KsDevice.Descriptor->Dispatch->Start);
/* do we have a device descriptor */ /* do we have a device descriptor */
if (DeviceHeader->Descriptor) if (DeviceHeader->KsDevice.Descriptor)
{ {
/* does the device want pnp notifications */ /* does the device want pnp notifications */
if (DeviceHeader->Descriptor->Dispatch) if (DeviceHeader->KsDevice.Descriptor->Dispatch)
{ {
/* does the driver care about IRP_MN_START_DEVICE */ /* does the driver care about IRP_MN_START_DEVICE */
if (DeviceHeader->Descriptor->Dispatch->Start) if (DeviceHeader->KsDevice.Descriptor->Dispatch->Start)
{ {
/* call driver start device routine */ /* call driver start device routine */
Status = DeviceHeader->Descriptor->Dispatch->Start(&DeviceHeader->KsDevice, Irp, Status = DeviceHeader->KsDevice.Descriptor->Dispatch->Start(&DeviceHeader->KsDevice, Irp,
IoStack->Parameters.StartDevice.AllocatedResourcesTranslated, TranslatedResourceList,
IoStack->Parameters.StartDevice.AllocatedResources); UntranslatedResourceList);
DPRINT("IKsDevice_PnpStartDevice Start %p, Context %p\n", DeviceHeader->KsDevice.Descriptor->Dispatch->Start, DeviceHeader->KsDevice.Context);
ASSERT(Status != STATUS_PENDING); ASSERT(Status != STATUS_PENDING);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
@ -303,7 +345,7 @@ IKsDevice_PnpStartDevice(
} }
/* does the driver need post start routine */ /* does the driver need post start routine */
if (DeviceHeader->Descriptor->Dispatch->PostStart) if (DeviceHeader->KsDevice.Descriptor->Dispatch->PostStart)
{ {
/* allocate pnp post workitem context */ /* allocate pnp post workitem context */
Ctx = (PPNP_POSTSTART_CONTEXT)AllocateItem(NonPagedPool, sizeof(PNP_POSTSTART_CONTEXT)); Ctx = (PPNP_POSTSTART_CONTEXT)AllocateItem(NonPagedPool, sizeof(PNP_POSTSTART_CONTEXT));
@ -335,6 +377,7 @@ IKsDevice_PnpStartDevice(
{ {
/* set state to enabled, IRP_MJ_CREATE request may now succeed */ /* set state to enabled, IRP_MJ_CREATE request may now succeed */
DeviceHeader->TargetState = KSTARGET_STATE_ENABLED; DeviceHeader->TargetState = KSTARGET_STATE_ENABLED;
Status = KspSetFilterFactoriesState(DeviceHeader, TRUE);
} }
} }
} }
@ -351,6 +394,7 @@ IKsDevice_PnpStartDevice(
} }
/* return result */ /* return result */
DPRINT1("IKsDevice_PnpStartDevice Status %x PostStartRoutine %p\n", Status, Ctx);
return Status; return Status;
} }
@ -375,10 +419,10 @@ IKsDevice_Pnp(
DeviceHeader = DeviceExtension->DeviceHeader; DeviceHeader = DeviceExtension->DeviceHeader;
/* do we have a device descriptor */ /* do we have a device descriptor */
if (DeviceHeader->Descriptor) if (DeviceHeader->KsDevice.Descriptor && DeviceHeader->KsDevice.Descriptor->Dispatch)
{ {
/* does the device want pnp notifications */ /* does the device want pnp notifications */
Dispatch = (PKSDEVICE_DISPATCH)DeviceHeader->Descriptor->Dispatch; Dispatch = (PKSDEVICE_DISPATCH)DeviceHeader->KsDevice.Descriptor->Dispatch;
} }
switch (IoStack->MinorFunction) switch (IoStack->MinorFunction)
@ -472,7 +516,7 @@ IKsDevice_Pnp(
/* pass the irp down the driver stack */ /* pass the irp down the driver stack */
Status = KspForwardIrpSynchronous(DeviceObject, Irp); Status = KspForwardIrpSynchronous(DeviceObject, Irp);
DPRINT("Next Device: Status %x\n", Status); DPRINT1("IRP_MN_QUERY_INTERFACE Next Device: Status %x\n", Status);
Irp->IoStatus.Status = Status; Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
@ -480,36 +524,32 @@ IKsDevice_Pnp(
} }
case IRP_MN_QUERY_DEVICE_RELATIONS: case IRP_MN_QUERY_DEVICE_RELATIONS:
{ {
DPRINT("IRP_MN_QUERY_DEVICE_RELATIONS\n");
/* pass the irp down the driver stack */ /* pass the irp down the driver stack */
Status = KspForwardIrpSynchronous(DeviceObject, Irp); Status = KspForwardIrpSynchronous(DeviceObject, Irp);
DPRINT("Next Device: Status %x\n", Status); DPRINT("IRP_MN_QUERY_DEVICE_RELATIONS Next Device: Status %x\n", Status);
Irp->IoStatus.Status = Status; //Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status; return Status;
} }
case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: case IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
{ {
DPRINT("IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
/* pass the irp down the driver stack */ /* pass the irp down the driver stack */
Status = KspForwardIrpSynchronous(DeviceObject, Irp); //Status = KspForwardIrpSynchronous(DeviceObject, Irp);
Status = Irp->IoStatus.Status;
DPRINT("IRP_MN_FILTER_RESOURCE_REQUIREMENTS Next Device: Status %x\n", Status);
DPRINT("Next Device: Status %x\n", Status); //Irp->IoStatus.Status = Status;
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status; return Status;
} }
case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
{ {
DPRINT("IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n");
/* pass the irp down the driver stack */ /* pass the irp down the driver stack */
Status = KspForwardIrpSynchronous(DeviceObject, Irp); Status = KspForwardIrpSynchronous(DeviceObject, Irp);
DPRINT("Next Device: Status %x\n", Status); DPRINT("IRP_MN_QUERY_RESOURCE_REQUIREMENTS Next Device: Status %x\n", Status);
Irp->IoStatus.Status = Status; Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
@ -552,7 +592,7 @@ IKsDevice_Create(
PKSIOBJECT_HEADER ObjectHeader; PKSIOBJECT_HEADER ObjectHeader;
NTSTATUS Status; NTSTATUS Status;
DPRINT("KS / CREATE\n"); DPRINT("IKsDevice_Create\n");
/* get current stack location */ /* get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
/* get device extension */ /* get device extension */
@ -630,9 +670,11 @@ KsInitializeDevice(
PDEVICE_EXTENSION DeviceExtension; PDEVICE_EXTENSION DeviceExtension;
PKSIDEVICE_HEADER Header; PKSIDEVICE_HEADER Header;
ULONG Index; ULONG Index;
IKsDevice * KsDevice; PKSIOBJECT_BAG Bag;
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
DPRINT("KsInitializeDevice Descriptor %p\n", Descriptor);
/* get device extension */ /* get device extension */
DeviceExtension = (PDEVICE_EXTENSION)FunctionalDeviceObject->DeviceExtension; DeviceExtension = (PDEVICE_EXTENSION)FunctionalDeviceObject->DeviceExtension;
@ -642,10 +684,13 @@ KsInitializeDevice(
/* point to allocated header */ /* point to allocated header */
Header = DeviceExtension->DeviceHeader; Header = DeviceExtension->DeviceHeader;
DPRINT("DeviceHeader %p\n", DeviceExtension->DeviceHeader);
/* check for success */ /* check for success */
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT1("Failed to allocate device header with %x\n", Status); DPRINT1("KsInitializeDevice Failed to allocate device header with %x\n", Status);
return Status; return Status;
} }
@ -653,7 +698,7 @@ KsInitializeDevice(
Header->lpVtblIKsDevice = &vt_IKsDevice; Header->lpVtblIKsDevice = &vt_IKsDevice;
Header->ref = 1; Header->ref = 1;
/* initialize object bag */ /* allocate object bag */
Header->KsDevice.Bag = AllocateItem(NonPagedPool, sizeof(KSIOBJECT_BAG)); Header->KsDevice.Bag = AllocateItem(NonPagedPool, sizeof(KSIOBJECT_BAG));
if (!Header->KsDevice.Bag) if (!Header->KsDevice.Bag)
{ {
@ -662,25 +707,41 @@ KsInitializeDevice(
return STATUS_INSUFFICIENT_RESOURCES; return STATUS_INSUFFICIENT_RESOURCES;
} }
KsDevice = (IKsDevice*)&DeviceExtension->DeviceHeader->lpVtblIKsDevice; /* initialize object bag */
KsDevice->lpVtbl->InitializeObjectBag(KsDevice, Header->KsDevice.Bag, NULL); KeInitializeMutex(&Header->BagMutex, 0);
KeInitializeMutex(&Header->DeviceMutex, 0);
Bag = (PKSIOBJECT_BAG)Header->KsDevice.Bag;
Bag->BagMutex = &Header->BagMutex;
InitializeListHead(&Header->ObjectBags);
InitializeListHead(&Bag->ObjectList);
Bag->DeviceHeader = (PVOID)Header;
/* insert bag into device list */
InsertTailList(&Header->ObjectBags, &Bag->Entry);
/* initialize device header */ /* initialize device header */
Header->KsDevice.FunctionalDeviceObject = FunctionalDeviceObject; Header->KsDevice.FunctionalDeviceObject = FunctionalDeviceObject;
Header->KsDevice.PhysicalDeviceObject = PhysicalDeviceObject; Header->KsDevice.PhysicalDeviceObject = PhysicalDeviceObject;
Header->KsDevice.NextDeviceObject = NextDeviceObject; Header->KsDevice.NextDeviceObject = NextDeviceObject;
Header->KsDevice.Descriptor = Descriptor; Header->KsDevice.Descriptor = Descriptor;
Header->KsDevice.SystemPowerState = PowerSystemWorking;
Header->KsDevice.DevicePowerState = PowerDeviceD0;
Header->KsDevice.Started = FALSE;
Header->KsDevice.Context = NULL;
KsSetDevicePnpAndBaseObject(Header, PhysicalDeviceObject, NextDeviceObject); KsSetDevicePnpAndBaseObject(Header, PhysicalDeviceObject, NextDeviceObject);
/* FIXME Power state */
if (Descriptor) if (Descriptor)
{ {
/* create a filter factory for each filter descriptor */ /* create a filter factory for each filter descriptor */
DPRINT("KsInitializeDevice FilterDescriptorCount %lu\n", Descriptor->FilterDescriptorsCount);
for(Index = 0; Index < Descriptor->FilterDescriptorsCount; Index++) for(Index = 0; Index < Descriptor->FilterDescriptorsCount; Index++)
{ {
Status = KspCreateFilterFactory(FunctionalDeviceObject, Descriptor->FilterDescriptors[Index], NULL, NULL, 0, NULL, NULL, NULL); Status = KspCreateFilterFactory(FunctionalDeviceObject, Descriptor->FilterDescriptors[Index], NULL, NULL, 0, NULL, NULL, NULL);
DPRINT("KsInitializeDevice Index %lu KspCreateFilterFactory Status %lx\n", Index, Status);
/* check for success */ /* check for success */
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
@ -697,6 +758,7 @@ KsInitializeDevice(
Status = Descriptor->Dispatch->Add(&Header->KsDevice); Status = Descriptor->Dispatch->Add(&Header->KsDevice);
DPRINT("Driver: AddHandler Status %x\n", Status); DPRINT("Driver: AddHandler Status %x\n", Status);
Header->KsDevice.Descriptor = Descriptor;
} }
} }

View file

@ -17,6 +17,9 @@ KspSetDeviceInterfacesState(
SymEntry = (PSYMBOLIC_LINK_ENTRY)CONTAINING_RECORD(Entry, SYMBOLIC_LINK_ENTRY, Entry); SymEntry = (PSYMBOLIC_LINK_ENTRY)CONTAINING_RECORD(Entry, SYMBOLIC_LINK_ENTRY, Entry);
/* set device interface state */ /* set device interface state */
Status = IoSetDeviceInterfaceState(&SymEntry->SymbolicLink, Enable); Status = IoSetDeviceInterfaceState(&SymEntry->SymbolicLink, Enable);
DPRINT("KspSetDeviceInterfacesState SymbolicLink %S Status %lx\n", SymEntry->SymbolicLink.Buffer, Status, Enable);
/* check for success */ /* check for success */
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
return Status; return Status;
@ -95,4 +98,34 @@ KspRegisterDeviceInterfaces(
return Status; return Status;
} }
NTSTATUS
KspSetFilterFactoriesState(
IN PKSIDEVICE_HEADER DeviceHeader,
IN BOOLEAN NewState)
{
PCREATE_ITEM_ENTRY CreateEntry;
PLIST_ENTRY Entry;
NTSTATUS Status = STATUS_SUCCESS;
/* grab first device interface */
Entry = DeviceHeader->ItemList.Flink;
while(Entry != &DeviceHeader->ItemList && Status == STATUS_SUCCESS)
{
/* grab create entry */
CreateEntry = CONTAINING_RECORD(Entry, CREATE_ITEM_ENTRY, Entry);
/* sanity check */
ASSERT(CreateEntry->CreateItem);
if (CreateEntry->CreateItem->Create == IKsFilterFactory_Create)
{
/* found our own filterfactory */
Status = KsFilterFactorySetDeviceClassesState((PKSFILTERFACTORY)CreateEntry->CreateItem->Context, NewState);
}
Entry = Entry->Flink;
}
/* store result */
return Status;
}

View file

@ -39,6 +39,8 @@ KsGetDevice(
{ {
PKSBASIC_HEADER BasicHeader = (PKSBASIC_HEADER)(ULONG_PTR)Object - sizeof(KSBASIC_HEADER); PKSBASIC_HEADER BasicHeader = (PKSBASIC_HEADER)(ULONG_PTR)Object - sizeof(KSBASIC_HEADER);
DPRINT("KsGetDevice %p\n", Object);
ASSERT(BasicHeader->Type == KsObjectTypeFilterFactory || BasicHeader->Type == KsObjectTypeFilter || BasicHeader->Type == BasicHeader->Type); ASSERT(BasicHeader->Type == KsObjectTypeFilterFactory || BasicHeader->Type == KsObjectTypeFilter || BasicHeader->Type == BasicHeader->Type);
return BasicHeader->KsDevice; return BasicHeader->KsDevice;
@ -63,6 +65,8 @@ KsCreateDevice(
if (!ExtensionSize) if (!ExtensionSize)
ExtensionSize = sizeof(KSDEVICE_HEADER); ExtensionSize = sizeof(KSDEVICE_HEADER);
DPRINT("KsCreateDevice Descriptor %p ExtensionSize %lu\n", Descriptor, ExtensionSize);
Status = IoCreateDevice(DriverObject, ExtensionSize, NULL, FILE_DEVICE_KS, FILE_DEVICE_SECURE_OPEN, FALSE, &FunctionalDeviceObject); Status = IoCreateDevice(DriverObject, ExtensionSize, NULL, FILE_DEVICE_KS, FILE_DEVICE_SECURE_OPEN, FALSE, &FunctionalDeviceObject);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
return Status; return Status;
@ -120,7 +124,8 @@ KsAddDevice(
const KSDEVICE_DESCRIPTOR *Descriptor = NULL; const KSDEVICE_DESCRIPTOR *Descriptor = NULL;
/* get stored driver object extension */ /* get stored driver object extension */
DriverObjectExtension = IoGetDriverObjectExtension(DriverObject, (PVOID)KsAddDevice);
DriverObjectExtension = IoGetDriverObjectExtension(DriverObject, (PVOID)KsInitializeDriver);
if (DriverObjectExtension) if (DriverObjectExtension)
{ {
@ -144,17 +149,23 @@ KsInitializeDriver(
) )
{ {
PKS_DRIVER_EXTENSION DriverObjectExtension; PKS_DRIVER_EXTENSION DriverObjectExtension;
NTSTATUS Status; NTSTATUS Status = STATUS_SUCCESS;
if (Descriptor) if (Descriptor)
{ {
Status = IoAllocateDriverObjectExtension(DriverObject, (PVOID)KsAddDevice, sizeof(KS_DRIVER_EXTENSION), (PVOID*)&DriverObjectExtension); Status = IoAllocateDriverObjectExtension(DriverObject, (PVOID)KsInitializeDriver, sizeof(KS_DRIVER_EXTENSION), (PVOID*)&DriverObjectExtension);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
DriverObjectExtension->Descriptor = Descriptor; DriverObjectExtension->Descriptor = Descriptor;
} }
} }
/* sanity check */
ASSERT(Status == STATUS_SUCCESS);
if (!NT_SUCCESS(Status))
return Status;
/* Setting our IRP handlers */ /* Setting our IRP handlers */
DriverObject->MajorFunction[IRP_MJ_CREATE] = IKsDevice_Create; DriverObject->MajorFunction[IRP_MJ_CREATE] = IKsDevice_Create;
DriverObject->MajorFunction[IRP_MJ_PNP] = IKsDevice_Pnp; DriverObject->MajorFunction[IRP_MJ_PNP] = IKsDevice_Pnp;
@ -168,7 +179,7 @@ KsInitializeDriver(
DriverObject->DriverExtension->AddDevice = KsAddDevice; DriverObject->DriverExtension->AddDevice = KsAddDevice;
/* KS handles these */ /* KS handles these */
DPRINT1("Setting KS function handlers\n"); DPRINT1("KsInitializeDriver Setting KS function handlers\n");
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_CLOSE); KsSetMajorFunctionHandler(DriverObject, IRP_MJ_CLOSE);
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_DEVICE_CONTROL); KsSetMajorFunctionHandler(DriverObject, IRP_MJ_DEVICE_CONTROL);

View file

@ -338,6 +338,8 @@ KspCreateFilterFactory(
IKsFilterFactory * Filter; IKsFilterFactory * Filter;
NTSTATUS Status; NTSTATUS Status;
DPRINT("KsCreateFilterFactory\n");
/* Lets allocate a filterfactory */ /* Lets allocate a filterfactory */
This = AllocateItem(NonPagedPool, sizeof(IKsFilterFactoryImpl)); This = AllocateItem(NonPagedPool, sizeof(IKsFilterFactoryImpl));
if (!This) if (!This)
@ -396,8 +398,10 @@ KsFilterFactorySetDeviceClassesState(
IN PKSFILTERFACTORY FilterFactory, IN PKSFILTERFACTORY FilterFactory,
IN BOOLEAN NewState) IN BOOLEAN NewState)
{ {
IKsFilterFactory * Factory = (IKsFilterFactory*)CONTAINING_RECORD(FilterFactory, IKsFilterFactoryImpl, FilterFactory); IKsFilterFactory * Factory;
IKsFilterFactoryImpl * This = (IKsFilterFactoryImpl*)CONTAINING_RECORD(FilterFactory, IKsFilterFactoryImpl, FilterFactory);
Factory = (IKsFilterFactory*)&This->lpVtbl;
return Factory->lpVtbl->SetDeviceClassesState(Factory, NewState); return Factory->lpVtbl->SetDeviceClassesState(Factory, NewState);
} }
@ -465,7 +469,8 @@ KsFilterFactoryUpdateCacheData (
IN const KSFILTER_DESCRIPTOR* FilterDescriptor OPTIONAL) IN const KSFILTER_DESCRIPTOR* FilterDescriptor OPTIONAL)
{ {
UNIMPLEMENTED UNIMPLEMENTED
DPRINT("KsFilterFactoryUpdateCacheData %p\n", FilterDescriptor);
return STATUS_NOT_IMPLEMENTED; return STATUS_SUCCESS;
} }

View file

@ -9,7 +9,7 @@
#include "priv.h" #include "priv.h"
const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}; const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x46}};
/* http://msdn2.microsoft.com/en-us/library/ms809781.aspx */ /* http://msdn2.microsoft.com/en-us/library/ms809781.aspx */
COMDDKAPI NTSTATUS NTAPI COMDDKAPI NTSTATUS NTAPI

View file

@ -144,3 +144,15 @@ KspPropertyHandler(
IN const KSPROPERTY_SET* PropertySet, IN const KSPROPERTY_SET* PropertySet,
IN PFNKSALLOCATOR Allocator OPTIONAL, IN PFNKSALLOCATOR Allocator OPTIONAL,
IN ULONG PropertyItemSize OPTIONAL); IN ULONG PropertyItemSize OPTIONAL);
NTSTATUS
NTAPI
IKsFilterFactory_Create(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
NTSTATUS
KspSetFilterFactoriesState(
IN PKSIDEVICE_HEADER DeviceHeader,
IN BOOLEAN NewState);

View file

@ -103,7 +103,7 @@ typedef struct
LIST_ENTRY TargetDeviceList; LIST_ENTRY TargetDeviceList;
KMUTEX DeviceMutex; KMUTEX DeviceMutex;
KSDEVICE_DESCRIPTOR* Descriptor; KMUTEX BagMutex;
LIST_ENTRY PowerDispatchList; LIST_ENTRY PowerDispatchList;
LIST_ENTRY ObjectBags; LIST_ENTRY ObjectBags;

View file

@ -70,7 +70,7 @@ KspForwardIrpSynchronous(
IoSetCompletionRoutine(Irp, KspForwardIrpSynchronousCompletion, (PVOID)&Event, TRUE, TRUE, TRUE); IoSetCompletionRoutine(Irp, KspForwardIrpSynchronousCompletion, (PVOID)&Event, TRUE, TRUE, TRUE);
/* now call the driver */ /* now call the driver */
Status = IoCallDriver(DeviceHeader->BaseDevice, Irp); Status = IoCallDriver(DeviceHeader->KsDevice.NextDeviceObject, Irp);
/* did the request complete yet */ /* did the request complete yet */
if (Status == STATUS_PENDING) if (Status == STATUS_PENDING)
{ {

View file

@ -52,13 +52,13 @@ KSMETHOD_SET FilterMethodSet =
KSAUTOMATION_TABLE FilterAutomationTable = KSAUTOMATION_TABLE FilterAutomationTable =
{ {
1, 1,
sizeof(KSPROPERTY_SET), sizeof(KSPROPERTY_ITEM),
&FilterPropertySet, &FilterPropertySet,
1, 1,
sizeof(KSMETHOD_SET), sizeof(KSMETHOD_ITEM),
&FilterMethodSet, &FilterMethodSet,
0, 0,
sizeof(KSEVENT_SET), sizeof(KSEVENT_ITEM),
NULL NULL
}; };
@ -80,13 +80,13 @@ KSPROPERTY_SET PinPropertySet =
KSAUTOMATION_TABLE PinAutomationTable = KSAUTOMATION_TABLE PinAutomationTable =
{ {
1, 1,
sizeof(KSPROPERTY_SET), sizeof(KSPROPERTY_ITEM),
&PinPropertySet, &PinPropertySet,
0, 0,
sizeof(KSMETHOD_SET), sizeof(KSMETHOD_ITEM),
NULL, NULL,
0, 0,
sizeof(KSEVENT_SET), sizeof(KSEVENT_ITEM),
NULL NULL
}; };
@ -157,6 +157,8 @@ NTAPI
DllInitialize( DllInitialize(
PUNICODE_STRING RegistryPath) PUNICODE_STRING RegistryPath)
{ {
DPRINT("BDASUP::DllInitialize\n");
KeInitializeSpinLock(&g_Settings.FilterFactoryInstanceListLock); KeInitializeSpinLock(&g_Settings.FilterFactoryInstanceListLock);
InitializeListHead(&g_Settings.FilterFactoryInstanceList); InitializeListHead(&g_Settings.FilterFactoryInstanceList);
g_Settings.Initialized = TRUE; g_Settings.Initialized = TRUE;
@ -171,6 +173,8 @@ NTSTATUS
NTAPI NTAPI
BdaCheckChanges(IN PIRP Irp) BdaCheckChanges(IN PIRP Irp)
{ {
DPRINT("BdaCheckChanges\n");
if (!Irp) if (!Irp)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -184,6 +188,8 @@ NTSTATUS
NTAPI NTAPI
BdaCommitChanges(IN PIRP Irp) BdaCommitChanges(IN PIRP Irp)
{ {
DPRINT("BdaCommitChanges\n");
if (!Irp) if (!Irp)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -257,6 +263,7 @@ BdaCreateFilterFactoryEx(
NTSTATUS Status; NTSTATUS Status;
KSFILTER_DESCRIPTOR FilterDescriptor; KSFILTER_DESCRIPTOR FilterDescriptor;
DPRINT("BdaCreateFilterFactoryEx\n");
/* backup filter descriptor */ /* backup filter descriptor */
RtlMoveMemory(&FilterDescriptor, pFilterDescriptor, sizeof(KSFILTER_DESCRIPTOR)); RtlMoveMemory(&FilterDescriptor, pFilterDescriptor, sizeof(KSFILTER_DESCRIPTOR));
@ -265,7 +272,10 @@ BdaCreateFilterFactoryEx(
/* check for success */ /* check for success */
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{
DPRINT1("KsMergeAutomationTables failed with %lx\n", Status);
return Status; return Status;
}
/* allocate filter instance */ /* allocate filter instance */
FilterInstance = AllocateItem(NonPagedPool, sizeof(BDA_FILTER_INSTANCE_ENTRY)); FilterInstance = AllocateItem(NonPagedPool, sizeof(BDA_FILTER_INSTANCE_ENTRY));
@ -287,6 +297,7 @@ BdaCreateFilterFactoryEx(
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
/* destroy filter instance */ /* destroy filter instance */
DPRINT1("KsAddItemToObjectBag failed with %lx\n", Status);
FreeItem(FilterInstance); FreeItem(FilterInstance);
KsDeleteFilterFactory(FilterFactory); KsDeleteFilterFactory(FilterFactory);
return Status; return Status;
@ -316,9 +327,11 @@ BdaCreateFilterFactoryEx(
{ {
/* failed to create filter factory */ /* failed to create filter factory */
FreeItem(FilterInstance); FreeItem(FilterInstance);
DPRINT1("KsCreateFilterFactory failed with %lx\n", Status);
} }
/* done */ /* done */
DPRINT("BdaCreateFilterFactoryEx Status %x\n", Status);
return Status; return Status;
} }
@ -339,6 +352,8 @@ BdaCreatePin(
ULONG PinId; ULONG PinId;
KSPIN_DESCRIPTOR_EX NewPinDescriptor; KSPIN_DESCRIPTOR_EX NewPinDescriptor;
DPRINT("BdaCreatePin\n");
if (!pulPinId || !pKSFilter) if (!pulPinId || !pKSFilter)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -419,6 +434,8 @@ BdaMethodCreatePin(
PKSM_PIN Pin; PKSM_PIN Pin;
PKSFILTER Filter; PKSFILTER Filter;
DPRINT("BdaMethodCreatePin\n");
if (!Irp) if (!Irp)
{ {
/* invalid parameter */ /* invalid parameter */
@ -453,6 +470,8 @@ BdaInitFilter(
ULONG Index, PinId; ULONG Index, PinId;
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
DPRINT("BdaInitFilter\n");
/* check input parameters */ /* check input parameters */
if (!pKSFilter) if (!pKSFilter)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -501,6 +520,8 @@ BdaCreateTopology(
PKSFILTERFACTORY FilterFactory; PKSFILTERFACTORY FilterFactory;
KSTOPOLOGY_CONNECTION Connection; KSTOPOLOGY_CONNECTION Connection;
DPRINT("BdaCreateTopology\n");
/* check input parameters */ /* check input parameters */
if (!pKSFilter) if (!pKSFilter)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -547,6 +568,7 @@ BdaDeletePin(
IN ULONG *pulPinId) IN ULONG *pulPinId)
{ {
UNIMPLEMENTED UNIMPLEMENTED
DPRINT("BdaDeletePin\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
@ -559,6 +581,7 @@ BdaFilterFactoryUpdateCacheData(
IN PKSFILTERFACTORY FilterFactory, IN PKSFILTERFACTORY FilterFactory,
IN const KSFILTER_DESCRIPTOR *FilterDescriptor OPTIONAL) IN const KSFILTER_DESCRIPTOR *FilterDescriptor OPTIONAL)
{ {
DPRINT("BdaFilterFactoryUpdateCacheData\n");
return KsFilterFactoryUpdateCacheData(FilterFactory, FilterDescriptor); return KsFilterFactoryUpdateCacheData(FilterFactory, FilterDescriptor);
} }
@ -571,6 +594,8 @@ BdaGetChangeState(
IN PIRP Irp, IN PIRP Irp,
OUT BDA_CHANGE_STATE *ChangeState) OUT BDA_CHANGE_STATE *ChangeState)
{ {
DPRINT("BdaGetChangeState\n");
if (Irp && ChangeState) if (Irp && ChangeState)
{ {
*ChangeState = BDA_CHANGES_COMPLETE; *ChangeState = BDA_CHANGES_COMPLETE;
@ -595,6 +620,8 @@ BdaMethodCreateTopology(
PKSFILTER Filter; PKSFILTER Filter;
PKSP_BDA_NODE_PIN Node; PKSP_BDA_NODE_PIN Node;
DPRINT("BdaMethodCreateTopology\n");
/* check input parameters */ /* check input parameters */
if (!Irp || !pKSMethod) if (!Irp || !pKSMethod)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -622,6 +649,8 @@ BdaMethodDeletePin(
IN KSMETHOD *pKSMethod, IN KSMETHOD *pKSMethod,
OPTIONAL PVOID pvIgnored) OPTIONAL PVOID pvIgnored)
{ {
DPRINT("BdaMethodDeletePin\n");
if (!Irp) if (!Irp)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -639,6 +668,7 @@ BdaPropertyGetControllingPinId(
OUT ULONG *pulControllingPinId) OUT ULONG *pulControllingPinId)
{ {
UNIMPLEMENTED UNIMPLEMENTED
DPRINT("BdaPropertyGetControllingPinId\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
@ -657,6 +687,8 @@ BdaPropertyGetPinControl(
PKSFILTERFACTORY FilterFactory; PKSFILTERFACTORY FilterFactory;
PBDA_FILTER_INSTANCE_ENTRY InstanceEntry; PBDA_FILTER_INSTANCE_ENTRY InstanceEntry;
DPRINT("BdaPropertyGetPinControl\n");
/* first get the pin */ /* first get the pin */
Pin = KsGetPinFromIrp(Irp); Pin = KsGetPinFromIrp(Irp);
ASSERT(Pin); ASSERT(Pin);
@ -694,6 +726,7 @@ BdaPropertyNodeDescriptors(
OUT BDANODE_DESCRIPTOR *pNodeDescriptorProperty) OUT BDANODE_DESCRIPTOR *pNodeDescriptorProperty)
{ {
UNIMPLEMENTED UNIMPLEMENTED
DPRINT("BdaPropertyNodeDescriptors\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
@ -708,6 +741,7 @@ BdaPropertyNodeEvents(
OUT GUID *pguidProperty) OUT GUID *pguidProperty)
{ {
UNIMPLEMENTED UNIMPLEMENTED
DPRINT("BdaPropertyNodeEvents\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
@ -722,6 +756,7 @@ BdaPropertyNodeMethods(
OUT GUID *pguidProperty) OUT GUID *pguidProperty)
{ {
UNIMPLEMENTED UNIMPLEMENTED
DPRINT("BdaPropertyNodeMethods\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
@ -736,6 +771,7 @@ BdaPropertyNodeProperties(
OUT GUID *pguidProperty) OUT GUID *pguidProperty)
{ {
UNIMPLEMENTED UNIMPLEMENTED
DPRINT("BdaPropertyNodeProperties\n");
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
@ -755,6 +791,8 @@ BdaPropertyNodeTypes(
PIO_STACK_LOCATION IoStack; PIO_STACK_LOCATION IoStack;
ULONG Index; ULONG Index;
DPRINT("BdaPropertyNodeTypes\n");
/* check input parameter */ /* check input parameter */
if (!Irp || !pKSProperty) if (!Irp || !pKSProperty)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -821,6 +859,8 @@ BdaPropertyPinTypes(
PIO_STACK_LOCATION IoStack; PIO_STACK_LOCATION IoStack;
ULONG Index; ULONG Index;
DPRINT("BdaPropertyPinTypes\n");
/* check input parameter */ /* check input parameter */
if (!Irp || !pKSProperty) if (!Irp || !pKSProperty)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -886,6 +926,8 @@ BdaPropertyTemplateConnections(
PIO_STACK_LOCATION IoStack; PIO_STACK_LOCATION IoStack;
ULONG Index; ULONG Index;
DPRINT("BdaPropertyTemplateConnections\n");
/* validate parameters */ /* validate parameters */
if (!Irp || !pKSProperty) if (!Irp || !pKSProperty)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -941,6 +983,8 @@ NTSTATUS
NTAPI NTAPI
BdaStartChanges(IN PIRP Irp) BdaStartChanges(IN PIRP Irp)
{ {
DPRINT("BdaStartChanges\n");
if (Irp) if (Irp)
return STATUS_SUCCESS; return STATUS_SUCCESS;
else else
@ -955,6 +999,7 @@ NTSTATUS
NTAPI NTAPI
BdaUninitFilter(IN PKSFILTER pKSFilter) BdaUninitFilter(IN PKSFILTER pKSFilter)
{ {
DPRINT("BdaUninitFilter\n");
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -967,6 +1012,8 @@ BdaValidateNodeProperty(
IN PIRP Irp, IN PIRP Irp,
IN KSPROPERTY *KSProperty) IN KSPROPERTY *KSProperty)
{ {
DPRINT("BdaValidateNodeProperty\n");
/* check for valid parameter */ /* check for valid parameter */
if (Irp && KSProperty) if (Irp && KSProperty)
return STATUS_SUCCESS; return STATUS_SUCCESS;

View file

@ -17,15 +17,6 @@
#define PST_RS232 1 #define PST_RS232 1
#define COMMPROP_INITIALIZED 0xE73CF52E #define COMMPROP_INITIALIZED 0xE73CF52E
#ifndef _NTIFS_
/* Why is it only defined in ntifs.h file? */
NTSTATUS NTAPI
IoAttachDeviceToDeviceStackSafe(
IN PDEVICE_OBJECT SourceDevice,
IN PDEVICE_OBJECT TargetDevice,
OUT PDEVICE_OBJECT *AttachedToDeviceObject);
#endif
typedef enum typedef enum
{ {
dsStopped, dsStopped,

View file

@ -77,7 +77,7 @@ extern "C" {
SCSIPORT_API SCSIPORT_API
VOID VOID
DDKCDECLAPI __cdecl
ScsiDebugPrint( ScsiDebugPrint(
ULONG DebugPrintLevel, ULONG DebugPrintLevel,
PCCHAR DebugMessage, PCCHAR DebugMessage,
@ -1066,7 +1066,7 @@ IdeMediaStatus(
IN UCHAR Channel IN UCHAR Channel
); );
ULONG DDKAPI ULONG NTAPI
AtapiFindController( AtapiFindController(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,

View file

@ -1015,7 +1015,7 @@ UniataEnumBusMasterController(
PVOID Argument2 PVOID Argument2
); );
extern ULONG DDKAPI extern ULONG NTAPI
UniataFindCompatBusMasterController1( UniataFindCompatBusMasterController1(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,
@ -1025,7 +1025,7 @@ UniataFindCompatBusMasterController1(
OUT PBOOLEAN Again OUT PBOOLEAN Again
); );
extern ULONG DDKAPI extern ULONG NTAPI
UniataFindCompatBusMasterController2( UniataFindCompatBusMasterController2(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,
@ -1044,7 +1044,7 @@ UniataAllocateLunExt(
ULONG NewNumberChannels ULONG NewNumberChannels
); );
extern ULONG DDKAPI extern ULONG NTAPI
UniataFindBusMasterController( UniataFindBusMasterController(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,
@ -1054,7 +1054,7 @@ UniataFindBusMasterController(
OUT PBOOLEAN Again OUT PBOOLEAN Again
); );
extern ULONG DDKAPI extern ULONG NTAPI
UniataFindFakeBusMasterController( UniataFindFakeBusMasterController(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID Context, IN PVOID Context,

View file

@ -86,9 +86,7 @@
/* Compiler dependencies */ /* Compiler dependencies */
/***************************************************/ /***************************************************/
#define DDKAPI __stdcall
#define DDKFASTAPI __fastcall #define DDKFASTAPI __fastcall
#define DDKCDECLAPI __cdecl
/* Are we under GNU C (mingw) ??? */ /* Are we under GNU C (mingw) ??? */
#ifdef __GNUC__ #ifdef __GNUC__

View file

@ -94,7 +94,7 @@ BOOLEAN WinVer_WDM_Model = FALSE;
UCHAR g_foo = 0; UCHAR g_foo = 0;
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiResetController__( AtapiResetController__(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN ULONG PathId, IN ULONG PathId,
@ -115,7 +115,7 @@ AtapiHwInitialize__(
#ifndef UNIATA_CORE #ifndef UNIATA_CORE
VOID VOID
DDKAPI NTAPI
AtapiCallBack_X( AtapiCallBack_X(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
); );
@ -129,13 +129,13 @@ AtapiCallBack_X(
#endif #endif
RETTYPE_XXableInterrupts RETTYPE_XXableInterrupts
DDKAPI NTAPI
AtapiInterruptDpc( AtapiInterruptDpc(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
); );
RETTYPE_XXableInterrupts RETTYPE_XXableInterrupts
DDKAPI NTAPI
AtapiEnableInterrupts__( AtapiEnableInterrupts__(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
); );
@ -150,7 +150,7 @@ AtapiQueueTimerDpc(
); );
SCSI_ADAPTER_CONTROL_STATUS SCSI_ADAPTER_CONTROL_STATUS
DDKAPI NTAPI
AtapiAdapterControl( AtapiAdapterControl(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType, IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
@ -1005,7 +1005,7 @@ AtaUmode(PIDENTIFY_DATA2 ident)
#ifndef UNIATA_CORE #ifndef UNIATA_CORE
VOID VOID
DDKAPI NTAPI
AtapiTimerDpc( AtapiTimerDpc(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -1856,7 +1856,7 @@ Return Value:
--*/ --*/
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiResetController( AtapiResetController(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN ULONG PathId IN ULONG PathId
@ -2598,7 +2598,7 @@ Return Value:
--*/ --*/
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiHwInitialize( AtapiHwInitialize(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -3210,7 +3210,7 @@ Return Value:
--*/ --*/
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiInterrupt( AtapiInterrupt(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -3400,7 +3400,7 @@ AtapiInterrupt2(
} // end AtapiInterrupt2() } // end AtapiInterrupt2()
RETTYPE_XXableInterrupts RETTYPE_XXableInterrupts
DDKAPI NTAPI
AtapiInterruptDpc( AtapiInterruptDpc(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -3437,7 +3437,7 @@ AtapiInterruptDpc(
RETTYPE_XXableInterrupts RETTYPE_XXableInterrupts
DDKAPI NTAPI
AtapiEnableInterrupts__( AtapiEnableInterrupts__(
IN PVOID HwDeviceExtension IN PVOID HwDeviceExtension
) )
@ -7251,7 +7251,7 @@ Return Value:
--*/ --*/
BOOLEAN BOOLEAN
DDKAPI NTAPI
AtapiStartIo( AtapiStartIo(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb IN PSCSI_REQUEST_BLOCK Srb
@ -8343,7 +8343,7 @@ Return Value:
--*/ --*/
extern "C" extern "C"
ULONG ULONG
DDKAPI NTAPI
DriverEntry( DriverEntry(
IN PVOID DriverObject, IN PVOID DriverObject,
IN PVOID Argument2 IN PVOID Argument2
@ -9059,7 +9059,7 @@ AtapiRegCheckParameterValue(
SCSI_ADAPTER_CONTROL_STATUS SCSI_ADAPTER_CONTROL_STATUS
DDKAPI NTAPI
AtapiAdapterControl( AtapiAdapterControl(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType, IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
@ -9152,7 +9152,7 @@ AtapiAdapterControl(
extern "C" extern "C"
NTHALAPI NTHALAPI
VOID VOID
DDKAPI NTAPI
HalDisplayString ( HalDisplayString (
PUCHAR String PUCHAR String
); );

View file

@ -424,38 +424,38 @@ typedef struct _SCSI_WMI_REQUEST_BLOCK {
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_INITIALIZE) ( (NTAPI *PHW_INITIALIZE) (
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_STARTIO) ( (NTAPI *PHW_STARTIO) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb IN PSCSI_REQUEST_BLOCK Srb
); );
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_INTERRUPT) ( (NTAPI *PHW_INTERRUPT) (
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
typedef typedef
VOID VOID
(DDKAPI *PHW_TIMER) ( (NTAPI *PHW_TIMER) (
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
typedef typedef
VOID VOID
(DDKAPI *PHW_DMA_STARTED) ( (NTAPI *PHW_DMA_STARTED) (
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
typedef typedef
ULONG ULONG
(DDKAPI *PHW_FIND_ADAPTER) ( (NTAPI *PHW_FIND_ADAPTER) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN PVOID HwContext, IN PVOID HwContext,
IN PVOID BusInformation, IN PVOID BusInformation,
@ -466,14 +466,14 @@ ULONG
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_RESET_BUS) ( (NTAPI *PHW_RESET_BUS) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG PathId IN ULONG PathId
); );
typedef typedef
BOOLEAN BOOLEAN
(DDKAPI *PHW_ADAPTER_STATE) ( (NTAPI *PHW_ADAPTER_STATE) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN PVOID Context, IN PVOID Context,
IN BOOLEAN SaveState IN BOOLEAN SaveState
@ -481,7 +481,7 @@ BOOLEAN
typedef typedef
SCSI_ADAPTER_CONTROL_STATUS SCSI_ADAPTER_CONTROL_STATUS
(DDKAPI *PHW_ADAPTER_CONTROL) ( (NTAPI *PHW_ADAPTER_CONTROL) (
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN SCSI_ADAPTER_CONTROL_TYPE ControlType, IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
IN PVOID Parameters IN PVOID Parameters
@ -607,7 +607,7 @@ typedef struct _HW_INITIALIZATION_DATA_COMMON {
// //
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortInitialize( ScsiPortInitialize(
IN PVOID Argument1, IN PVOID Argument1,
IN PVOID Argument2, IN PVOID Argument2,
@ -616,14 +616,14 @@ ScsiPortInitialize(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortFreeDeviceBase( ScsiPortFreeDeviceBase(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PVOID MappedAddress IN PVOID MappedAddress
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortGetBusData( ScsiPortGetBusData(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG BusDataType, IN ULONG BusDataType,
@ -634,7 +634,7 @@ ScsiPortGetBusData(
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortSetBusDataByOffset( ScsiPortSetBusDataByOffset(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN ULONG BusDataType, IN ULONG BusDataType,
@ -646,7 +646,7 @@ ScsiPortSetBusDataByOffset(
); );
SCSIPORT_API SCSIPORT_API
PVOID DDKAPI PVOID NTAPI
ScsiPortGetDeviceBase( ScsiPortGetDeviceBase(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType, IN INTERFACE_TYPE BusType,
@ -657,7 +657,7 @@ ScsiPortGetDeviceBase(
); );
SCSIPORT_API SCSIPORT_API
PVOID DDKAPI PVOID NTAPI
ScsiPortGetLogicalUnit( ScsiPortGetLogicalUnit(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -666,7 +666,7 @@ ScsiPortGetLogicalUnit(
); );
SCSIPORT_API SCSIPORT_API
PSCSI_REQUEST_BLOCK DDKAPI PSCSI_REQUEST_BLOCK NTAPI
ScsiPortGetSrb( ScsiPortGetSrb(
IN PVOID DeviceExtension, IN PVOID DeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -676,7 +676,7 @@ ScsiPortGetSrb(
); );
SCSIPORT_API SCSIPORT_API
SCSI_PHYSICAL_ADDRESS DDKAPI SCSI_PHYSICAL_ADDRESS NTAPI
ScsiPortGetPhysicalAddress( ScsiPortGetPhysicalAddress(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb, IN PSCSI_REQUEST_BLOCK Srb,
@ -685,14 +685,14 @@ ScsiPortGetPhysicalAddress(
); );
SCSIPORT_API SCSIPORT_API
PVOID DDKAPI PVOID NTAPI
ScsiPortGetVirtualAddress( ScsiPortGetVirtualAddress(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN SCSI_PHYSICAL_ADDRESS PhysicalAddress IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
); );
SCSIPORT_API SCSIPORT_API
PVOID DDKAPI PVOID NTAPI
ScsiPortGetUncachedExtension( ScsiPortGetUncachedExtension(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
@ -700,13 +700,13 @@ ScsiPortGetUncachedExtension(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortFlushDma( ScsiPortFlushDma(
IN PVOID DeviceExtension IN PVOID DeviceExtension
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortIoMapTransfer( ScsiPortIoMapTransfer(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb, IN PSCSI_REQUEST_BLOCK Srb,
@ -715,7 +715,7 @@ ScsiPortIoMapTransfer(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKCDECLAPI VOID __cdecl
ScsiPortNotification( ScsiPortNotification(
IN SCSI_NOTIFICATION_TYPE NotificationType, IN SCSI_NOTIFICATION_TYPE NotificationType,
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
@ -723,7 +723,7 @@ ScsiPortNotification(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortLogError( ScsiPortLogError(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
@ -735,7 +735,7 @@ ScsiPortLogError(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortCompleteRequest( ScsiPortCompleteRequest(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN UCHAR PathId, IN UCHAR PathId,
@ -745,7 +745,7 @@ ScsiPortCompleteRequest(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortMoveMemory( ScsiPortMoveMemory(
IN PVOID WriteBuffer, IN PVOID WriteBuffer,
IN PVOID ReadBuffer, IN PVOID ReadBuffer,
@ -753,25 +753,25 @@ ScsiPortMoveMemory(
); );
SCSIPORT_API SCSIPORT_API
UCHAR DDKAPI UCHAR NTAPI
ScsiPortReadPortUchar( ScsiPortReadPortUchar(
IN PUCHAR Port IN PUCHAR Port
); );
SCSIPORT_API SCSIPORT_API
USHORT DDKAPI USHORT NTAPI
ScsiPortReadPortUshort( ScsiPortReadPortUshort(
IN PUSHORT Port IN PUSHORT Port
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortReadPortUlong( ScsiPortReadPortUlong(
IN PULONG Port IN PULONG Port
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadPortBufferUchar( ScsiPortReadPortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -779,7 +779,7 @@ ScsiPortReadPortBufferUchar(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadPortBufferUshort( ScsiPortReadPortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -787,7 +787,7 @@ ScsiPortReadPortBufferUshort(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadPortBufferUlong( ScsiPortReadPortBufferUlong(
IN PULONG Port, IN PULONG Port,
IN PULONG Buffer, IN PULONG Buffer,
@ -795,25 +795,25 @@ ScsiPortReadPortBufferUlong(
); );
SCSIPORT_API SCSIPORT_API
UCHAR DDKAPI UCHAR NTAPI
ScsiPortReadRegisterUchar( ScsiPortReadRegisterUchar(
IN PUCHAR Register IN PUCHAR Register
); );
SCSIPORT_API SCSIPORT_API
USHORT DDKAPI USHORT NTAPI
ScsiPortReadRegisterUshort( ScsiPortReadRegisterUshort(
IN PUSHORT Register IN PUSHORT Register
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortReadRegisterUlong( ScsiPortReadRegisterUlong(
IN PULONG Register IN PULONG Register
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadRegisterBufferUchar( ScsiPortReadRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -821,7 +821,7 @@ ScsiPortReadRegisterBufferUchar(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadRegisterBufferUshort( ScsiPortReadRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -829,7 +829,7 @@ ScsiPortReadRegisterBufferUshort(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortReadRegisterBufferUlong( ScsiPortReadRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -837,34 +837,34 @@ ScsiPortReadRegisterBufferUlong(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortStallExecution( ScsiPortStallExecution(
IN ULONG Delay IN ULONG Delay
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortUchar( ScsiPortWritePortUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN UCHAR Value IN UCHAR Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortUshort( ScsiPortWritePortUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN USHORT Value IN USHORT Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortUlong( ScsiPortWritePortUlong(
IN PULONG Port, IN PULONG Port,
IN ULONG Value IN ULONG Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortBufferUchar( ScsiPortWritePortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -872,7 +872,7 @@ ScsiPortWritePortBufferUchar(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortBufferUshort( ScsiPortWritePortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -880,7 +880,7 @@ ScsiPortWritePortBufferUshort(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWritePortBufferUlong( ScsiPortWritePortBufferUlong(
IN PULONG Port, IN PULONG Port,
IN PULONG Buffer, IN PULONG Buffer,
@ -888,28 +888,28 @@ ScsiPortWritePortBufferUlong(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterUchar( ScsiPortWriteRegisterUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN UCHAR Value IN UCHAR Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterUshort( ScsiPortWriteRegisterUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN USHORT Value IN USHORT Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterUlong( ScsiPortWriteRegisterUlong(
IN PULONG Register, IN PULONG Register,
IN ULONG Value IN ULONG Value
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterBufferUchar( ScsiPortWriteRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -917,7 +917,7 @@ ScsiPortWriteRegisterBufferUchar(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterBufferUshort( ScsiPortWriteRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -925,7 +925,7 @@ ScsiPortWriteRegisterBufferUshort(
); );
SCSIPORT_API SCSIPORT_API
VOID DDKAPI VOID NTAPI
ScsiPortWriteRegisterBufferUlong( ScsiPortWriteRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -933,13 +933,13 @@ ScsiPortWriteRegisterBufferUlong(
); );
SCSIPORT_API SCSIPORT_API
SCSI_PHYSICAL_ADDRESS DDKAPI SCSI_PHYSICAL_ADDRESS NTAPI
ScsiPortConvertUlongToPhysicalAddress( ScsiPortConvertUlongToPhysicalAddress(
ULONG UlongAddress ULONG UlongAddress
); );
SCSIPORT_API SCSIPORT_API
ULONG DDKAPI ULONG NTAPI
ScsiPortConvertPhysicalAddressToUlong( ScsiPortConvertPhysicalAddressToUlong(
SCSI_PHYSICAL_ADDRESS Address SCSI_PHYSICAL_ADDRESS Address
); );
@ -947,7 +947,7 @@ ScsiPortConvertPhysicalAddressToUlong(
#define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart) #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
SCSIPORT_API SCSIPORT_API
BOOLEAN DDKAPI BOOLEAN NTAPI
ScsiPortValidateRange( ScsiPortValidateRange(
IN PVOID HwDeviceExtension, IN PVOID HwDeviceExtension,
IN INTERFACE_TYPE BusType, IN INTERFACE_TYPE BusType,
@ -960,7 +960,7 @@ ScsiPortValidateRange(
// begin_ntminitape // begin_ntminitape
SCSIPORT_API SCSIPORT_API
VOID DDKCDECLAPI VOID __cdecl
ScsiDebugPrint( ScsiDebugPrint(
ULONG DebugPrintLevel, ULONG DebugPrintLevel,
PCCHAR DebugMessage, PCCHAR DebugMessage,

View file

@ -14,12 +14,8 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
#ifdef _MSC_VER
#define DDKAPI
#endif
SCSI_PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS
DDKAPI NTAPI
ScsiPortConvertUlongToPhysicalAddress( ScsiPortConvertUlongToPhysicalAddress(
IN ULONG UlongAddress) IN ULONG UlongAddress)
{ {
@ -27,7 +23,7 @@ ScsiPortConvertUlongToPhysicalAddress(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadPortBufferUchar( ScsiPortReadPortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -37,7 +33,7 @@ ScsiPortReadPortBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadPortBufferUshort( ScsiPortReadPortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -47,7 +43,7 @@ ScsiPortReadPortBufferUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadPortBufferUlong( ScsiPortReadPortBufferUlong(
IN PULONG Port, IN PULONG Port,
IN PULONG Buffer, IN PULONG Buffer,
@ -57,7 +53,7 @@ ScsiPortReadPortBufferUlong(
} }
UCHAR UCHAR
DDKAPI NTAPI
ScsiPortReadPortUchar( ScsiPortReadPortUchar(
IN PUCHAR Port) IN PUCHAR Port)
{ {
@ -65,7 +61,7 @@ ScsiPortReadPortUchar(
} }
USHORT USHORT
DDKAPI NTAPI
ScsiPortReadPortUshort( ScsiPortReadPortUshort(
IN PUSHORT Port) IN PUSHORT Port)
{ {
@ -73,7 +69,7 @@ ScsiPortReadPortUshort(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortReadPortUlong( ScsiPortReadPortUlong(
IN PULONG Port) IN PULONG Port)
{ {
@ -81,7 +77,7 @@ ScsiPortReadPortUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadRegisterBufferUchar( ScsiPortReadRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -91,7 +87,7 @@ ScsiPortReadRegisterBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadRegisterBufferUshort( ScsiPortReadRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -101,7 +97,7 @@ ScsiPortReadRegisterBufferUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortReadRegisterBufferUlong( ScsiPortReadRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -111,7 +107,7 @@ ScsiPortReadRegisterBufferUlong(
} }
UCHAR UCHAR
DDKAPI NTAPI
ScsiPortReadRegisterUchar( ScsiPortReadRegisterUchar(
IN PUCHAR Register) IN PUCHAR Register)
{ {
@ -119,7 +115,7 @@ ScsiPortReadRegisterUchar(
} }
USHORT USHORT
DDKAPI NTAPI
ScsiPortReadRegisterUshort( ScsiPortReadRegisterUshort(
IN PUSHORT Register) IN PUSHORT Register)
{ {
@ -127,7 +123,7 @@ ScsiPortReadRegisterUshort(
} }
ULONG ULONG
DDKAPI NTAPI
ScsiPortReadRegisterUlong( ScsiPortReadRegisterUlong(
IN PULONG Register) IN PULONG Register)
{ {
@ -135,7 +131,7 @@ ScsiPortReadRegisterUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortBufferUchar( ScsiPortWritePortBufferUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -145,7 +141,7 @@ ScsiPortWritePortBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortBufferUshort( ScsiPortWritePortBufferUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -155,7 +151,7 @@ ScsiPortWritePortBufferUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortBufferUlong( ScsiPortWritePortBufferUlong(
IN PULONG Port, IN PULONG Port,
IN PULONG Buffer, IN PULONG Buffer,
@ -165,7 +161,7 @@ ScsiPortWritePortBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortUchar( ScsiPortWritePortUchar(
IN PUCHAR Port, IN PUCHAR Port,
IN UCHAR Value) IN UCHAR Value)
@ -174,7 +170,7 @@ ScsiPortWritePortUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortUshort( ScsiPortWritePortUshort(
IN PUSHORT Port, IN PUSHORT Port,
IN USHORT Value) IN USHORT Value)
@ -183,7 +179,7 @@ ScsiPortWritePortUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWritePortUlong( ScsiPortWritePortUlong(
IN PULONG Port, IN PULONG Port,
IN ULONG Value) IN ULONG Value)
@ -192,7 +188,7 @@ ScsiPortWritePortUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterBufferUchar( ScsiPortWriteRegisterBufferUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN PUCHAR Buffer, IN PUCHAR Buffer,
@ -202,7 +198,7 @@ ScsiPortWriteRegisterBufferUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterBufferUshort( ScsiPortWriteRegisterBufferUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN PUSHORT Buffer, IN PUSHORT Buffer,
@ -212,7 +208,7 @@ ScsiPortWriteRegisterBufferUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterBufferUlong( ScsiPortWriteRegisterBufferUlong(
IN PULONG Register, IN PULONG Register,
IN PULONG Buffer, IN PULONG Buffer,
@ -222,7 +218,7 @@ ScsiPortWriteRegisterBufferUlong(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterUchar( ScsiPortWriteRegisterUchar(
IN PUCHAR Register, IN PUCHAR Register,
IN ULONG Value) IN ULONG Value)
@ -231,7 +227,7 @@ ScsiPortWriteRegisterUchar(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterUshort( ScsiPortWriteRegisterUshort(
IN PUSHORT Register, IN PUSHORT Register,
IN USHORT Value) IN USHORT Value)
@ -240,7 +236,7 @@ ScsiPortWriteRegisterUshort(
} }
VOID VOID
DDKAPI NTAPI
ScsiPortWriteRegisterUlong( ScsiPortWriteRegisterUlong(
IN PULONG Register, IN PULONG Register,
IN ULONG Value) IN ULONG Value)

View file

@ -26,7 +26,6 @@
#define DDKFASTAPI __fastcall #define DDKFASTAPI __fastcall
#define FASTCALL __fastcall #define FASTCALL __fastcall
#define DDKCDECLAPI __cdecl
ULONG DbgPrint(PCCH Format,...); ULONG DbgPrint(PCCH Format,...);

View file

@ -8,6 +8,7 @@
<if property="ARCH" value="i386"> <if property="ARCH" value="i386">
<xi:include href="hal.rbuild" /> <xi:include href="hal.rbuild" />
<xi:include href="halacpi.rbuild" />
<xi:include href="halxbox.rbuild" /> <xi:include href="halxbox.rbuild" />
<if property="BUILD_MP" value="1"> <if property="BUILD_MP" value="1">
<xi:include href="halmps.rbuild" /> <xi:include href="halmps.rbuild" />

View file

@ -0,0 +1,864 @@
/*
* PROJECT: ReactOS HAL
* LICENSE: BSD - See COPYING.ARM in the top level directory
* FILE: hal/halx86/generic/acpi/halacpi.c
* PURPOSE: HAL ACPI Code
* PROGRAMMERS: ReactOS Portable Systems Group
*/
/* INCLUDES *******************************************************************/
#include <hal.h>
#define NDEBUG
#include <debug.h>
/* GLOBALS ********************************************************************/
LIST_ENTRY HalpAcpiTableCacheList;
FAST_MUTEX HalpAcpiTableCacheLock;
BOOLEAN HalpProcessedACPIPhase0;
BOOLEAN HalpPhysicalMemoryMayAppearAbove4GB;
FADT HalpFixedAcpiDescTable;
PDEBUG_PORT_TABLE HalpDebugPortTable;
PACPI_SRAT HalpAcpiSrat;
PBOOT_TABLE HalpSimpleBootFlagTable;
PHYSICAL_ADDRESS HalpMaxHotPlugMemoryAddress;
PHYSICAL_ADDRESS HalpLowStubPhysicalAddress;
PHARDWARE_PTE HalpPteForFlush;
PVOID HalpVirtAddrForFlush;
PVOID HalpLowStub;
PACPI_BIOS_MULTI_NODE HalpAcpiMultiNode;
LIST_ENTRY HalpAcpiTableMatchList;
ULONG HalpInvalidAcpiTable;
/* PRIVATE FUNCTIONS **********************************************************/
PDESCRIPTION_HEADER
NTAPI
HalpAcpiGetCachedTable(IN ULONG Signature)
{
PLIST_ENTRY ListHead, NextEntry;
PACPI_CACHED_TABLE CachedTable;
/* Loop cached tables */
ListHead = &HalpAcpiTableCacheList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
/* Get the table */
CachedTable = CONTAINING_RECORD(NextEntry, ACPI_CACHED_TABLE, Links);
/* Compare signatures */
if (CachedTable->Header.Signature == Signature) return &CachedTable->Header;
/* Keep going */
NextEntry = NextEntry->Flink;
}
/* Nothing found */
return NULL;
}
VOID
NTAPI
HalpAcpiCacheTable(IN PDESCRIPTION_HEADER TableHeader)
{
PACPI_CACHED_TABLE CachedTable;
/* Get the cached table and link it */
CachedTable = CONTAINING_RECORD(TableHeader, ACPI_CACHED_TABLE, Header);
InsertTailList(&HalpAcpiTableCacheList, &CachedTable->Links);
}
PVOID
NTAPI
HalpAcpiCopyBiosTable(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PDESCRIPTION_HEADER TableHeader)
{
ULONG Size;
PFN_NUMBER PageCount;
PHYSICAL_ADDRESS PhysAddress;
PACPI_CACHED_TABLE CachedTable;
PDESCRIPTION_HEADER CopiedTable;
/* Size we'll need for the cached table */
Size = TableHeader->Length + FIELD_OFFSET(ACPI_CACHED_TABLE, Header);
if (LoaderBlock)
{
/* Phase 0: Convert to pages and use the HAL heap */
PageCount = BYTES_TO_PAGES(Size);
PhysAddress.LowPart = HalpAllocPhysicalMemory(LoaderBlock,
0x1000000,
PageCount,
FALSE);
if (PhysAddress.LowPart)
{
/* Map it */
CachedTable = HalpMapPhysicalMemory64(PhysAddress, PageCount);
}
else
{
/* No memory, so nothing to map */
CachedTable = NULL;
}
}
else
{
/* Use Mm pool */
CachedTable = ExAllocatePoolWithTag(NonPagedPool, Size, ' laH');
}
/* Do we have the cached table? */
if (CachedTable)
{
/* Copy the data */
CopiedTable = &CachedTable->Header;
RtlCopyMemory(CopiedTable, TableHeader, TableHeader->Length);
}
else
{
/* Nothing to return */
CopiedTable = NULL;
}
/* Return the table */
return CopiedTable;
}
PVOID
NTAPI
HalpAcpiGetTableFromBios(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN ULONG Signature)
{
PHYSICAL_ADDRESS PhysicalAddress;
PXSDT Xsdt;
PRSDT Rsdt;
PFADT Fadt;
PDESCRIPTION_HEADER Header = NULL;
ULONG TableLength;
CHAR CheckSum = 0;
ULONG Offset;
ULONG EntryCount, CurrentEntry;
PCHAR CurrentByte;
PFN_NUMBER PageCount;
/* Should not query the RSDT/XSDT by itself */
if ((Signature == RSDT_SIGNATURE) || (Signature == XSDT_SIGNATURE)) return NULL;
/* Special case request for DSDT, because the FADT points to it */
if (Signature == DSDT_SIGNATURE)
{
/* Grab the FADT */
Fadt = HalpAcpiGetTable(LoaderBlock, FADT_SIGNATURE);
if (Fadt)
{
/* Grab the DSDT address and assume 2 pages */
PhysicalAddress.LowPart = Fadt->dsdt;
TableLength = 2 * PAGE_SIZE;
/* Map it */
if (LoaderBlock)
{
/* Phase 0, use HAL heap */
Header = HalpMapPhysicalMemory64(PhysicalAddress, 2u);
}
else
{
/* Phase 1, use Mm */
Header = MmMapIoSpace(PhysicalAddress, 2 * PAGE_SIZE, 0);
}
/* Fail if we couldn't map it */
if (!Header)
{
DbgPrint("HAL: Failed to map ACPI table.\n");
return NULL;
}
/* Validate the signature */
DPRINT1("ACPI DSDT at 0x%p\n", Header);
if (Header->Signature != DSDT_SIGNATURE)
{
/* Fail and unmap */
if (LoaderBlock)
{
/* Using HAL heap */
HalpUnmapVirtualAddress(Header, 2);
}
else
{
/* Using Mm */
MmUnmapIoSpace(Header, 2 * PAGE_SIZE);
}
/* Didn't find anything */
return NULL;
}
}
else
{
/* Couldn't find it */
return NULL;
}
}
else
{
/* To find tables, we need the RSDT */
Rsdt = HalpAcpiGetTable(LoaderBlock, RSDT_SIGNATURE);
if (Rsdt)
{
/* Won't be using the XSDT */
Xsdt = NULL;
}
else
{
/* Only other choice is to use the XSDT */
Xsdt = HalpAcpiGetTable(LoaderBlock, XSDT_SIGNATURE);
if (!Xsdt) return NULL;
/* Won't be using the RSDT */
DPRINT1("ACPI XSDT at 0x%p\n", Xsdt);
Rsdt = NULL;
}
/* Smallest RSDT/XSDT is one without table entries */
Offset = FIELD_OFFSET(RSDT, Tables);
if (Xsdt)
{
/* Figure out total size of table and the offset */
TableLength = Xsdt->Header.Length;
if (TableLength < Offset) Offset = Xsdt->Header.Length;
/* The entries are each 64-bits, so count them */
EntryCount = (TableLength - Offset) / sizeof(PHYSICAL_ADDRESS);
}
else
{
/* Figure out total size of table and the offset */
TableLength = Rsdt->Header.Length;
if (TableLength < Offset) Offset = Rsdt->Header.Length;
/* The entries are each 32-bits, so count them */
EntryCount = (TableLength - Offset) / sizeof(ULONG);
}
/* Start at the beginning of the array and loop it */
for (CurrentEntry = 0; CurrentEntry < EntryCount; CurrentEntry++)
{
/* Are we using the XSDT? */
if (!Xsdt)
{
/* Read the 32-bit physical address */
PhysicalAddress.LowPart = Rsdt->Tables[CurrentEntry];
}
else
{
/* Read the 64-bit physical address */
PhysicalAddress = Xsdt->Tables[CurrentEntry];
}
/* Had we already mapped a table? */
if (Header)
{
/* Yes, unmap it */
if (LoaderBlock)
{
/* Using HAL heap */
HalpUnmapVirtualAddress(Header, 2);
}
else
{
/* Using Mm */
MmUnmapIoSpace(Header, 2 * PAGE_SIZE);
}
}
/* Now map this table */
if (!LoaderBlock)
{
/* Phase 1: Use HAL heap */
Header = MmMapIoSpace(PhysicalAddress, 2 * PAGE_SIZE, MmNonCached);
}
else
{
/* Phase 0: Use Mm */
Header = HalpMapPhysicalMemory64(PhysicalAddress, 2);
}
/* Check if we mapped it */
if (!Header)
{
/* Game over */
DbgPrint("HAL: Failed to map ACPI table.\n");
return NULL;
}
/* We found it, break out */
DPRINT("Found ACPI table %c%c%c%c at 0x%p\n",
Header->Signature & 0xFF,
(Header->Signature & 0xFF00) >> 8,
(Header->Signature & 0xFF0000) >> 16,
(Header->Signature & 0xFF000000) >> 24,
Header);
if (Header->Signature == Signature) break;
}
/* Did we end up here back at the last entry? */
if (CurrentEntry == EntryCount)
{
/* Yes, unmap the last table we processed */
if (LoaderBlock)
{
/* Using HAL heap */
HalpUnmapVirtualAddress(Header, 2);
}
else
{
/* Using Mm */
MmUnmapIoSpace(Header, 2 * PAGE_SIZE);
}
/* Didn't find anything */
return NULL;
}
}
/* Past this point, we assume something was found */
ASSERT(Header);
/* How many pages do we need? */
PageCount = BYTES_TO_PAGES(Header->Length);
if (PageCount != 2)
{
/* We assumed two, but this is not the case, free the current mapping */
if (LoaderBlock)
{
/* Using HAL heap */
HalpUnmapVirtualAddress(Header, 2);
}
else
{
/* Using Mm */
MmUnmapIoSpace(Header, 2 * PAGE_SIZE);
}
/* Now map this table using its correct size */
if (!LoaderBlock)
{
/* Phase 1: Use HAL heap */
Header = MmMapIoSpace(PhysicalAddress, PageCount << PAGE_SHIFT, MmNonCached);
}
else
{
/* Phase 0: Use Mm */
Header = HalpMapPhysicalMemory64(PhysicalAddress, PageCount);
}
}
/* Fail if the remapped failed */
if (!Header) return NULL;
/* All tables in ACPI 3.0 other than the FACP should have correct checksum */
if ((Header->Signature != FADT_SIGNATURE) || (Header->Revision > 2))
{
/* Go to the end of the table */
CheckSum = 0;
CurrentByte = (PCHAR)Header + Header->Length;
while (CurrentByte-- != (PCHAR)Header)
{
/* Add this byte */
CheckSum += *CurrentByte;
}
/* The correct checksum is always 0, anything else is illegal */
if (CheckSum) HalpInvalidAcpiTable = Header->Signature;
}
/* Return the table */
return Header;
}
PVOID
NTAPI
HalpAcpiGetTable(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN ULONG Signature)
{
PFN_NUMBER PageCount;
PDESCRIPTION_HEADER TableAddress, BiosCopy;
/* See if we have a cached table? */
TableAddress = HalpAcpiGetCachedTable(Signature);
if (!TableAddress)
{
/* No cache, search the BIOS */
TableAddress = HalpAcpiGetTableFromBios(LoaderBlock, Signature);
if (TableAddress)
{
/* Found it, copy it into our own memory */
BiosCopy = HalpAcpiCopyBiosTable(LoaderBlock, TableAddress);
/* Get the pages, and unmap the BIOS copy */
PageCount = BYTES_TO_PAGES(TableAddress->Length);
if (LoaderBlock)
{
/* Phase 0, use the HAL heap */
HalpUnmapVirtualAddress(TableAddress, PageCount);
}
else
{
/* Phase 1, use Mm */
MmUnmapIoSpace(TableAddress, PageCount << 12);
}
/* Cache the bios copy */
TableAddress = BiosCopy;
if (BiosCopy) HalpAcpiCacheTable(BiosCopy);
}
}
/* Return the table */
return TableAddress;
}
PVOID
NTAPI
HalAcpiGetTable(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN ULONG Signature)
{
PDESCRIPTION_HEADER TableHeader;
/* Is this phase0 */
if (LoaderBlock)
{
/* Initialize the cache first */
if (!NT_SUCCESS(HalpAcpiTableCacheInit(LoaderBlock))) return NULL;
}
else
{
/* Lock the cache */
ExAcquireFastMutex(&HalpAcpiTableCacheLock);
}
/* Get the table */
TableHeader = HalpAcpiGetTable(LoaderBlock, Signature);
/* Release the lock in phase 1 */
if (!LoaderBlock) ExReleaseFastMutex(&HalpAcpiTableCacheLock);
/* Return the table */
return TableHeader;
}
VOID
NTAPI
HalpNumaInitializeStaticConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
PACPI_SRAT SratTable;
/* Get the SRAT, bail out if it doesn't exist */
SratTable = HalAcpiGetTable(LoaderBlock, SRAT_SIGNATURE);
HalpAcpiSrat = SratTable;
if (!SratTable) return;
}
VOID
NTAPI
HalpGetHotPlugMemoryInfo(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
PACPI_SRAT SratTable;
/* Get the SRAT, bail out if it doesn't exist */
SratTable = HalAcpiGetTable(LoaderBlock, SRAT_SIGNATURE);
HalpAcpiSrat = SratTable;
if (!SratTable) return;
}
VOID
NTAPI
HalpDynamicSystemResourceConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
/* For this HAL, it means to get hot plug memory information */
HalpGetHotPlugMemoryInfo(LoaderBlock);
}
VOID
NTAPI
HalpAcpiDetectMachineSpecificActions(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PFADT DescriptionTable)
{
/* Does this HAL specify something? */
if (HalpAcpiTableMatchList.Flink)
{
/* Great, but we don't support it */
DPRINT1("WARNING: Your HAL has specific ACPI hacks to apply!\n");
}
}
VOID
NTAPI
HalpInitBootTable(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
PBOOT_TABLE BootTable;
/* Get the boot table */
BootTable = HalAcpiGetTable(LoaderBlock, BOOT_SIGNATURE);
HalpSimpleBootFlagTable = BootTable;
DPRINT1("ACPI BOOT at 0x%p\n", HalpSimpleBootFlagTable);
/* Validate it */
if ((BootTable) &&
(BootTable->Header.Length >= sizeof(BOOT_TABLE)) &&
(BootTable->CMOSIndex >= 9))
{
DPRINT1("ACPI Boot table found, but not supported!\n");
}
else
{
/* Invalid or doesn't exist, ignore it */
HalpSimpleBootFlagTable = 0;
}
/* Install the end of boot handler */
// HalEndOfBoot = HalpEndOfBoot;
}
NTSTATUS
NTAPI
HalpAcpiFindRsdtPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
OUT PACPI_BIOS_MULTI_NODE* AcpiMultiNode)
{
PCONFIGURATION_COMPONENT_DATA ComponentEntry;
PCONFIGURATION_COMPONENT_DATA Next = NULL;
PCM_PARTIAL_RESOURCE_LIST ResourceList;
PACPI_BIOS_MULTI_NODE NodeData;
ULONG NodeLength;
PFN_NUMBER PageCount;
PVOID MappedAddress;
PHYSICAL_ADDRESS PhysicalAddress;
/* Did we already do this once? */
if (HalpAcpiMultiNode)
{
/* Return what we know */
*AcpiMultiNode = HalpAcpiMultiNode;
return STATUS_SUCCESS;
}
/* Assume failure */
*AcpiMultiNode = NULL;
/* Find the multi function adapter key */
ComponentEntry = KeFindConfigurationNextEntry(LoaderBlock->ConfigurationRoot,
AdapterClass,
MultiFunctionAdapter,
0,
&Next);
while (ComponentEntry)
{
/* Find the ACPI BIOS key */
if (!_stricmp(ComponentEntry->ComponentEntry.Identifier, "ACPI BIOS"))
{
/* Found it */
break;
}
/* Keep searching */
Next = ComponentEntry;
ComponentEntry = KeFindConfigurationNextEntry(LoaderBlock->ConfigurationRoot,
AdapterClass,
MultiFunctionAdapter,
NULL,
&Next);
}
/* Make sure we found it */
if (!ComponentEntry)
{
DbgPrint("**** HalpAcpiFindRsdtPhase0: did NOT find RSDT\n");
return STATUS_NOT_FOUND;
}
/* The configuration data is a resource list, and the BIOS node follows */
ResourceList = ComponentEntry->ConfigurationData;
NodeData = (PACPI_BIOS_MULTI_NODE)(ResourceList + 1);
/* How many E820 memory entries are there? */
NodeLength = sizeof(ACPI_BIOS_MULTI_NODE) +
(NodeData->Count - 1) * sizeof(ACPI_E820_ENTRY);
/* Convert to pages */
PageCount = BYTES_TO_PAGES(NodeLength);
/* Allocate the memory */
PhysicalAddress.LowPart = HalpAllocPhysicalMemory(LoaderBlock,
0x1000000,
PageCount,
FALSE);
if (PhysicalAddress.LowPart)
{
/* Map it if the allocation worked */
MappedAddress = HalpMapPhysicalMemory64(PhysicalAddress, PageCount);
}
else
{
/* Otherwise we'll have to fail */
MappedAddress = NULL;
}
/* Save the multi node, bail out if we didn't find it */
HalpAcpiMultiNode = MappedAddress;
if (!MappedAddress) return STATUS_INSUFFICIENT_RESOURCES;
/* Copy the multi-node data */
RtlCopyMemory(MappedAddress, NodeData, NodeLength);
/* Return the data */
*AcpiMultiNode = HalpAcpiMultiNode;
return STATUS_SUCCESS;
}
NTSTATUS
NTAPI
HalpAcpiTableCacheInit(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
PACPI_BIOS_MULTI_NODE AcpiMultiNode;
NTSTATUS Status = STATUS_SUCCESS;
PHYSICAL_ADDRESS PhysicalAddress;
PVOID MappedAddress;
ULONG TableLength;
PRSDT Rsdt;
PLOADER_PARAMETER_EXTENSION LoaderExtension;
/* Only initialize once */
if (HalpAcpiTableCacheList.Flink) return Status;
/* Setup the lock and table */
ExInitializeFastMutex(&HalpAcpiTableCacheLock);
InitializeListHead(&HalpAcpiTableCacheList);
/* Find the RSDT */
Status = HalpAcpiFindRsdtPhase0(LoaderBlock, &AcpiMultiNode);
if (!NT_SUCCESS(Status)) return Status;
/* Map the RSDT */
if (LoaderBlock)
{
/* Phase0: Use HAL Heap to map the RSDT, we assume it's about 2 pages */
PhysicalAddress.QuadPart = AcpiMultiNode->RsdtAddress.QuadPart;
MappedAddress = HalpMapPhysicalMemory64(PhysicalAddress, 2);
}
else
{
/* Use an I/O map */
MappedAddress = MmMapIoSpace(PhysicalAddress, PAGE_SIZE * 2, MmNonCached);
}
/* Get the RSDT */
Rsdt = MappedAddress;
if (!MappedAddress)
{
/* Fail, no memory */
DbgPrint("HAL: Failed to map RSDT\n");
return STATUS_INSUFFICIENT_RESOURCES;
}
/* Validate it */
DPRINT1("ACPI RSDT at 0x%p\n", Rsdt);
if ((Rsdt->Header.Signature != RSDT_SIGNATURE) &&
(Rsdt->Header.Signature != XSDT_SIGNATURE))
{
/* Very bad: crash */
HalDisplayString("Bad RSDT pointer\n");
KeBugCheckEx(MISMATCHED_HAL, 4, __LINE__, 0, 0);
}
/* We assumed two pages -- do we need less or more? */
TableLength = ADDRESS_AND_SIZE_TO_SPAN_PAGES(PhysicalAddress.LowPart,
Rsdt->Header.Length);
if (TableLength != 2)
{
/* Are we in phase 0 or 1? */
if (!LoaderBlock)
{
/* Unmap the old table, remap the new one, using Mm I/O space */
MmUnmapIoSpace(MappedAddress, 2 * PAGE_SIZE);
MappedAddress = MmMapIoSpace(PhysicalAddress,
TableLength << PAGE_SHIFT,
MmNonCached);
}
else
{
/* Unmap the old table, remap the new one, using HAL heap */
HalpUnmapVirtualAddress(MappedAddress, 2);
MappedAddress = HalpMapPhysicalMemory64(PhysicalAddress, TableLength);
}
/* Get the remapped table */
Rsdt = MappedAddress;
if (!MappedAddress)
{
/* Fail, no memory */
DbgPrint("HAL: Couldn't remap RSDT\n");
return STATUS_INSUFFICIENT_RESOURCES;
}
}
/* Now take the BIOS copy and make our own local copy */
Rsdt = HalpAcpiCopyBiosTable(LoaderBlock, &Rsdt->Header);
if (!Rsdt)
{
/* Fail, no memory */
DbgPrint("HAL: Couldn't remap RSDT\n");
return STATUS_INSUFFICIENT_RESOURCES;
}
/* Get rid of the BIOS mapping */
if (LoaderBlock)
{
/* Use HAL heap */
HalpUnmapVirtualAddress(MappedAddress, TableLength);
}
else
{
/* Use Mm */
MmUnmapIoSpace(MappedAddress, TableLength << PAGE_SHIFT);
}
/* Cache the RSDT */
HalpAcpiCacheTable(&Rsdt->Header);
/* Check for compatible loader block extension */
LoaderExtension = LoaderBlock->Extension;
if (LoaderExtension->Size >= 0x58)
{
/* Compatible loader: did it provide an ACPI table override? */
if ((LoaderExtension->AcpiTable) && (LoaderExtension->AcpiTableSize))
{
/* Great, because we don't support it! */
DPRINT1("ACPI Table Overrides Not Supported!\n");
}
}
/* Done */
return Status;
}
VOID
NTAPI
HaliAcpiTimerInit(IN ULONG TimerPort,
IN ULONG TimerValExt)
{
PAGED_CODE();
/* Is this in the init phase? */
if (!TimerPort )
{
/* Get the data from the FADT */
TimerPort = HalpFixedAcpiDescTable.pm_tmr_blk_io_port;
TimerValExt = HalpFixedAcpiDescTable.flags & ACPI_TMR_VAL_EXT;
}
/* FIXME: Now proceed to the timer initialization */
DPRINT1("ACPI Timer at: %Xh (EXT: %d)\n", TimerPort, TimerValExt);
//HalaAcpiTimerInit(TimerPort, TimerValExt);
}
NTSTATUS
NTAPI
HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
NTSTATUS Status;
PFADT Fadt;
ULONG TableLength;
PHYSICAL_ADDRESS PhysicalAddress;
/* Only do this once */
DPRINT1("You are booting the ACPI HAL!\n");
if (HalpProcessedACPIPhase0) return STATUS_SUCCESS;
/* Setup the ACPI table cache */
Status = HalpAcpiTableCacheInit(LoaderBlock);
if (!NT_SUCCESS(Status)) return Status;
/* Grab the FADT */
Fadt = HalAcpiGetTable(LoaderBlock, FADT_SIGNATURE);
if (!Fadt)
{
/* Fail */
DbgPrint("HAL: Didn't find the FACP\n");
return STATUS_NOT_FOUND;
}
/* Assume typical size, otherwise whatever the descriptor table says */
DPRINT1("ACPI FACP at 0x%p\n", Fadt);
TableLength = sizeof(FADT);
if (Fadt->Header.Length < sizeof(FADT)) TableLength = Fadt->Header.Length;
/* Copy it in the HAL static buffer */
RtlCopyMemory(&HalpFixedAcpiDescTable, Fadt, TableLength);
/* Anything special this HAL needs to do? */
HalpAcpiDetectMachineSpecificActions(LoaderBlock, &HalpFixedAcpiDescTable);
/* Get the debug table for KD */
HalpDebugPortTable = HalAcpiGetTable(LoaderBlock, DBGP_SIGNATURE);
DPRINT1("ACPI DBGP at 0x%p\n", HalpDebugPortTable);
/* Initialize NUMA through the SRAT */
HalpNumaInitializeStaticConfiguration(LoaderBlock);
/* Initialize hotplug through the SRAT */
HalpDynamicSystemResourceConfiguration(LoaderBlock);
DPRINT1("ACPI SRAT at 0x%p\n", HalpAcpiSrat);
if (HalpAcpiSrat)
{
DPRINT1("Your machine has a SRAT, but NUMA/HotPlug are not supported!\n");
}
/* Can there be memory higher than 4GB? */
if (HalpMaxHotPlugMemoryAddress.HighPart >= 1)
{
/* We'll need this for DMA later */
HalpPhysicalMemoryMayAppearAbove4GB = TRUE;
}
/* Setup the ACPI timer */
HaliAcpiTimerInit(0, 0);
/* Do we have a low stub address yet? */
if (!HalpLowStubPhysicalAddress.LowPart)
{
/* Allocate it */
HalpLowStubPhysicalAddress.LowPart = HalpAllocPhysicalMemory(LoaderBlock,
0x100000,
1,
FALSE);
if (HalpLowStubPhysicalAddress.LowPart)
{
/* Map it */
HalpLowStub = HalpMapPhysicalMemory64(HalpLowStubPhysicalAddress, 1);
}
}
/* Grab a page for flushes */
PhysicalAddress.QuadPart = 0x100000;
HalpVirtAddrForFlush = HalpMapPhysicalMemory64(PhysicalAddress, 1);
HalpPteForFlush = HalAddressToPte(HalpVirtAddrForFlush);
/* Don't do this again */
HalpProcessedACPIPhase0 = TRUE;
/* Setup the boot table */
HalpInitBootTable(LoaderBlock);
/* Return success */
return STATUS_SUCCESS;
}
/* EOF */

View file

@ -0,0 +1,817 @@
/*
* PROJECT: ReactOS HAL
* LICENSE: BSD - See COPYING.ARM in the top level directory
* FILE: hal/halx86/generic/acpi/halpnpdd.c
* PURPOSE: HAL Plug and Play Device Driver
* PROGRAMMERS: ReactOS Portable Systems Group
*/
/* INCLUDES *******************************************************************/
#include <hal.h>
#define NDEBUG
#include <debug.h>
typedef enum _EXTENSION_TYPE
{
PdoExtensionType = 0xC0,
FdoExtensionType
} EXTENSION_TYPE;
typedef enum _PDO_TYPE
{
AcpiPdo = 0x80,
WdPdo
} PDO_TYPE;
typedef struct _FDO_EXTENSION
{
EXTENSION_TYPE ExtensionType;
struct _PDO_EXTENSION* ChildPdoList;
PDEVICE_OBJECT PhysicalDeviceObject;
PDEVICE_OBJECT FunctionalDeviceObject;
PDEVICE_OBJECT AttachedDeviceObject;
} FDO_EXTENSION, *PFDO_EXTENSION;
typedef struct _PDO_EXTENSION
{
EXTENSION_TYPE ExtensionType;
struct _PDO_EXTENSION* Next;
PDEVICE_OBJECT PhysicalDeviceObject;
PFDO_EXTENSION ParentFdoExtension;
PDO_TYPE PdoType;
PDESCRIPTION_HEADER WdTable;
LONG InterfaceReferenceCount;
} PDO_EXTENSION, *PPDO_EXTENSION;
/* GLOBALS ********************************************************************/
PDRIVER_OBJECT HalpDriverObject;
BOOLEAN HalDisableFirmwareMapper = TRUE;
PWCHAR HalHardwareIdString = L"acpipic_up";
/* PRIVATE FUNCTIONS **********************************************************/
NTSTATUS
NTAPI
HalpMarkAcpiHal(VOID)
{
NTSTATUS Status;
UNICODE_STRING KeyString;
HANDLE KeyHandle;
HANDLE Handle;
/* Open the control set key */
RtlInitUnicodeString(&KeyString,
L"\\REGISTRY\\MACHINE\\SYSTEM\\CURRENTCONTROLSET");
Status = HalpOpenRegistryKey(&Handle, 0, &KeyString, KEY_ALL_ACCESS, FALSE);
if (NT_SUCCESS(Status))
{
/* Open the PNP key */
RtlInitUnicodeString(&KeyString, L"Control\\Pnp");
Status = HalpOpenRegistryKey(&KeyHandle,
Handle,
&KeyString,
KEY_ALL_ACCESS,
TRUE);
/* Close root key */
ZwClose(Handle);
/* Check if PNP BIOS key exists */
if (NT_SUCCESS(Status))
{
/* Set the disable value to false -- we need the mapper */
RtlInitUnicodeString(&KeyString, L"DisableFirmwareMapper");
Status = ZwSetValueKey(KeyHandle,
&KeyString,
0,
REG_DWORD,
&HalDisableFirmwareMapper,
sizeof(HalDisableFirmwareMapper));
/* Close subkey */
ZwClose(KeyHandle);
}
}
/* Return status */
return Status;
}
NTSTATUS
NTAPI
HalpAddDevice(IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT TargetDevice)
{
NTSTATUS Status;
PFDO_EXTENSION FdoExtension;
PPDO_EXTENSION PdoExtension;
PDEVICE_OBJECT DeviceObject, PdoDeviceObject, AttachedDevice;
PDESCRIPTION_HEADER Wdrt;
DbgPrint("HAL: PnP Driver ADD!\n");
/* Create the FDO */
Status = IoCreateDevice(DriverObject,
sizeof(FDO_EXTENSION),
NULL,
FILE_DEVICE_BUS_EXTENDER,
0,
FALSE,
&DeviceObject);
if (!NT_SUCCESS(Status))
{
/* Should not happen */
DbgBreakPoint();
return Status;
}
/* Setup the FDO extension */
FdoExtension = DeviceObject->DeviceExtension;
FdoExtension->ExtensionType = FdoExtensionType;
FdoExtension->PhysicalDeviceObject = TargetDevice;
FdoExtension->FunctionalDeviceObject = DeviceObject;
/* FDO is done initializing */
DeviceObject->Flags &= DO_DEVICE_INITIALIZING;
/* Attach to the physical device object (the bus) */
AttachedDevice = IoAttachDeviceToDeviceStack(DeviceObject, TargetDevice);
if (!AttachedDevice)
{
/* Failed, undo everything */
IoDeleteDevice(DeviceObject);
return STATUS_NO_SUCH_DEVICE;
}
/* Save the attachment */
FdoExtension->AttachedDeviceObject = AttachedDevice;
/* Create the PDO */
Status = IoCreateDevice(DriverObject,
sizeof(PDO_EXTENSION),
NULL,
FILE_DEVICE_BUS_EXTENDER,
FILE_AUTOGENERATED_DEVICE_NAME,
FALSE,
&PdoDeviceObject);
if (!NT_SUCCESS(Status))
{
/* Fail */
DbgPrint("HAL: Could not create ACPI device object status=0x%08x\n", Status);
return Status;
}
/* Setup the PDO device extension */
PdoExtension = PdoDeviceObject->DeviceExtension;
PdoExtension->Next = NULL;
PdoExtension->ExtensionType = PdoExtensionType;
PdoExtension->PhysicalDeviceObject = PdoDeviceObject;
PdoExtension->ParentFdoExtension = FdoExtension;
PdoExtension->PdoType = AcpiPdo;
/* Find the ACPI watchdog table */
Wdrt = HalAcpiGetTable(0, 'TRDW');
if (!Wdrt)
{
/* None exists, there is nothing to do more */
PdoDeviceObject->Flags &= DO_DEVICE_INITIALIZING;
FdoExtension->ChildPdoList = PdoExtension;
}
else
{
/* FIXME: TODO */
DPRINT1("You have an ACPI Watchdog. That's great! You should be proud ;-)\n");
PdoDeviceObject->Flags &= DO_DEVICE_INITIALIZING;
FdoExtension->ChildPdoList = PdoExtension;
}
/* Return status */
DPRINT1("Device added %lx\n", Status);
return Status;
}
NTSTATUS
NTAPI
HalpQueryInterface(IN PDEVICE_OBJECT DeviceObject,
IN CONST GUID* InterfaceType,
IN USHORT Version,
IN PVOID InterfaceSpecificData,
IN ULONG InterfaceBufferSize,
IN PINTERFACE Interface,
OUT PULONG Length)
{
UNIMPLEMENTED;
while (TRUE);
return STATUS_NO_SUCH_DEVICE;
}
NTSTATUS
NTAPI
HalpQueryDeviceRelations(IN PDEVICE_OBJECT DeviceObject,
IN DEVICE_RELATION_TYPE RelationType,
OUT PDEVICE_RELATIONS* DeviceRelations)
{
EXTENSION_TYPE ExtensionType;
PPDO_EXTENSION PdoExtension;
PFDO_EXTENSION FdoExtension;
PDEVICE_RELATIONS PdoRelations, FdoRelations;
PDEVICE_OBJECT* ObjectEntry;
ULONG i = 0, PdoCount = 0;
/* Get FDO device extension and PDO count */
FdoExtension = DeviceObject->DeviceExtension;
ExtensionType = FdoExtension->ExtensionType;
/* What do they want? */
if (RelationType == BusRelations)
{
/* This better be an FDO */
if (ExtensionType == FdoExtensionType)
{
/* Count how many PDOs we have */
PdoExtension = FdoExtension->ChildPdoList;
while (PdoExtension)
{
/* Next one */
PdoExtension = PdoExtension->Next;
PdoCount++;
}
/* Allocate our structure */
FdoRelations = ExAllocatePoolWithTag(PagedPool,
FIELD_OFFSET(DEVICE_RELATIONS,
Objects) +
4 * PdoCount,
' laH');
if (!FdoRelations) return STATUS_INSUFFICIENT_RESOURCES;
/* Save our count */
FdoRelations->Count = PdoCount;
/* Query existing relations */
ObjectEntry = FdoRelations->Objects;
if (*DeviceRelations)
{
/* Check if there were any */
if ((*DeviceRelations)->Count)
{
/* Loop them all */
do
{
/* Copy into our structure */
*ObjectEntry++ = (*DeviceRelations)->Objects[i];
}
while (++i < (*DeviceRelations)->Count);
}
/* Free existing structure */
ExFreePoolWithTag(*DeviceRelations, 0);
}
/* Now check if we have a PDO list */
PdoExtension = FdoExtension->ChildPdoList;
if (PdoExtension)
{
/* Loop the PDOs */
do
{
/* Save our own PDO and reference it */
*ObjectEntry++ = PdoExtension->PhysicalDeviceObject;
ObfReferenceObject(PdoExtension->PhysicalDeviceObject);
/* Go to our next PDO */
PdoExtension = PdoExtension->Next;
}
while (PdoExtension);
}
/* Return the new structure */
*DeviceRelations = FdoRelations;
return STATUS_SUCCESS;
}
}
else
{
/* The only other thing we support is a target relation for the PDO */
if ((RelationType == TargetDeviceRelation) &&
(ExtensionType == PdoExtensionType))
{
/* Only one entry */
PdoRelations = ExAllocatePoolWithTag(PagedPool,
sizeof(DEVICE_RELATIONS),
' laH');
if (!PdoRelations) return STATUS_INSUFFICIENT_RESOURCES;
/* Fill it out and reference us */
PdoRelations->Count = 1;
PdoRelations->Objects[0] = DeviceObject;
ObfReferenceObject(DeviceObject);
/* Return it */
*DeviceRelations = PdoRelations;
return STATUS_SUCCESS;
}
}
/* We don't support anything else */
return STATUS_NOT_SUPPORTED;
}
NTSTATUS
NTAPI
HalpQueryCapabilities(IN PDEVICE_OBJECT DeviceObject,
OUT PDEVICE_CAPABILITIES Capabilities)
{
PPDO_EXTENSION PdoExtension;
NTSTATUS Status;
PAGED_CODE();
/* Get the extension and check for valid version */
PdoExtension = DeviceObject->DeviceExtension;
ASSERT(Capabilities->Version == 1);
if (Capabilities->Version == 1)
{
/* Can't lock or eject us */
Capabilities->LockSupported = FALSE;
Capabilities->EjectSupported = FALSE;
/* Can't remove or dock us */
Capabilities->Removable = FALSE;
Capabilities->DockDevice = FALSE;
/* Can't access us raw */
Capabilities->RawDeviceOK = FALSE;
/* We have a unique ID, and don't bother the user */
Capabilities->UniqueID = TRUE;
Capabilities->SilentInstall = TRUE;
/* Fill out the adress */
Capabilities->Address = InterfaceTypeUndefined;
Capabilities->UINumber = InterfaceTypeUndefined;
/* Fill out latencies */
Capabilities->D1Latency = 0;
Capabilities->D2Latency = 0;
Capabilities->D3Latency = 0;
/* Fill out supported device states */
Capabilities->DeviceState[PowerSystemWorking] = PowerDeviceD0;
Capabilities->DeviceState[PowerSystemHibernate] = PowerDeviceD3;
Capabilities->DeviceState[PowerSystemShutdown] = PowerDeviceD3;
Capabilities->DeviceState[PowerSystemSleeping3] = PowerDeviceD3;
/* Done */
Status = STATUS_SUCCESS;
}
else
{
/* Fail */
Status = STATUS_NOT_SUPPORTED;
}
/* Return status */
return Status;
}
NTSTATUS
NTAPI
HalpQueryResources(IN PDEVICE_OBJECT DeviceObject,
OUT PCM_RESOURCE_LIST *Resources)
{
UNIMPLEMENTED;
while (TRUE);
return STATUS_NO_SUCH_DEVICE;
}
NTSTATUS
NTAPI
HalpQueryResourceRequirements(IN PDEVICE_OBJECT DeviceObject,
OUT PIO_RESOURCE_REQUIREMENTS_LIST *Requirements)
{
UNIMPLEMENTED;
while (TRUE);
return STATUS_NO_SUCH_DEVICE;
}
NTSTATUS
NTAPI
HalpQueryIdPdo(IN PDEVICE_OBJECT DeviceObject,
IN BUS_QUERY_ID_TYPE IdType,
OUT PUSHORT *BusQueryId)
{
PPDO_EXTENSION PdoExtension;
PDO_TYPE PdoType;
PWCHAR Id;
NTSTATUS Status;
ULONG Length;
PWCHAR Buffer;
/* Get the PDO type */
PdoExtension = DeviceObject->DeviceExtension;
PdoType = PdoExtension->PdoType;
/* What kind of ID is being requested? */
DPRINT("ID: %d\n", IdType);
switch (IdType)
{
case BusQueryDeviceID:
case BusQueryHardwareIDs:
/* What kind of PDO is this? */
if (PdoType == AcpiPdo)
{
/* PCI ID */
Id = L"ACPI_HAL\\PNP0C08";
}
else if (PdoType == WdPdo)
{
/* WatchDog ID */
Id = L"ACPI_HAL\\PNP0C18";
}
else
{
/* Unknown */
return STATUS_NOT_SUPPORTED;
}
/* Static length */
Length = 32;
break;
case BusQueryInstanceID:
/* And our instance ID */
Id = L"0";
Length = sizeof(L"0") + sizeof(UNICODE_NULL);
break;
case BusQueryCompatibleIDs:
default:
/* We don't support anything else */
return STATUS_NOT_SUPPORTED;
}
/* Allocate the buffer */
Buffer = ExAllocatePoolWithTag(PagedPool,
Length + sizeof(UNICODE_NULL),
' laH');
if (Buffer)
{
/* Copy the string and null-terminate it */
RtlCopyMemory(Buffer, Id, Length);
Buffer[Length / sizeof(WCHAR)] = UNICODE_NULL;
/* Return string */
*BusQueryId = Buffer;
Status = STATUS_SUCCESS;
DPRINT("Returning: %S\n", *BusQueryId);
}
else
{
/* Fail */
Status = STATUS_INSUFFICIENT_RESOURCES;
}
/* Return status */
return Status;
}
NTSTATUS
NTAPI
HalpQueryIdFdo(IN PDEVICE_OBJECT DeviceObject,
IN BUS_QUERY_ID_TYPE IdType,
OUT PUSHORT *BusQueryId)
{
NTSTATUS Status;
ULONG Length;
PWCHAR Id;
PWCHAR Buffer;
/* What kind of ID is being requested? */
DPRINT("ID: %d\n", IdType);
switch (IdType)
{
case BusQueryDeviceID:
case BusQueryHardwareIDs:
/* This is our hardware ID */
Id = HalHardwareIdString;
Length = wcslen(HalHardwareIdString) + sizeof(UNICODE_NULL);
break;
case BusQueryInstanceID:
/* And our instance ID */
Id = L"0";
Length = sizeof(L"0") + sizeof(UNICODE_NULL);
break;
default:
/* We don't support anything else */
return STATUS_NOT_SUPPORTED;
}
/* Allocate the buffer */
Buffer = ExAllocatePoolWithTag(PagedPool,
Length + sizeof(UNICODE_NULL),
' laH');
if (Buffer)
{
/* Copy the string and null-terminate it */
RtlCopyMemory(Buffer, Id, Length);
Buffer[Length / sizeof(WCHAR)] = UNICODE_NULL;
/* Return string */
*BusQueryId = Buffer;
Status = STATUS_SUCCESS;
DPRINT("Returning: %S\n", *BusQueryId);
}
else
{
/* Fail */
Status = STATUS_INSUFFICIENT_RESOURCES;
}
/* Return status */
return Status;
}
NTSTATUS
NTAPI
HalpPassIrpFromFdoToPdo(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
PFDO_EXTENSION FdoExtension;
/* Get the extension */
FdoExtension = DeviceObject->DeviceExtension;
/* Pass it to the attached device (our PDO) */
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(FdoExtension->AttachedDeviceObject, Irp);
}
NTSTATUS
NTAPI
HalpDispatchPnp(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
PIO_STACK_LOCATION IoStackLocation;
PPDO_EXTENSION PdoExtension;
PFDO_EXTENSION FdoExtension;
NTSTATUS Status;
UCHAR Minor;
/* Get the device extension and stack location */
FdoExtension = DeviceObject->DeviceExtension;
IoStackLocation = IoGetCurrentIrpStackLocation(Irp);
Minor = IoStackLocation->MinorFunction;
/* FDO? */
if (FdoExtension->ExtensionType == FdoExtensionType)
{
/* Query the IRP type */
switch (Minor)
{
case IRP_MN_QUERY_DEVICE_RELATIONS:
/* Call the worker */
DPRINT("Querying device relations for FDO\n");
Status = HalpQueryDeviceRelations(DeviceObject,
IoStackLocation->Parameters.QueryDeviceRelations.Type,
(PVOID)&Irp->IoStatus.Information);
break;
case IRP_MN_QUERY_INTERFACE:
/* Call the worker */
DPRINT("Querying interface for FDO\n");
Status = HalpQueryInterface(DeviceObject,
IoStackLocation->Parameters.QueryInterface.InterfaceType,
IoStackLocation->Parameters.QueryInterface.Size,
IoStackLocation->Parameters.QueryInterface.InterfaceSpecificData,
IoStackLocation->Parameters.QueryInterface.Version,
IoStackLocation->Parameters.QueryInterface.Interface,
(PVOID)&Irp->IoStatus.Information);
break;
case IRP_MN_QUERY_ID:
/* Call the worker */
DPRINT("Querying ID for FDO\n");
Status = HalpQueryIdFdo(DeviceObject,
IoStackLocation->Parameters.QueryId.IdType,
(PVOID)&Irp->IoStatus.Information);
break;
default:
/* Pass it to the PDO */
DPRINT("Other IRP: %lx\n", Minor);
return HalpPassIrpFromFdoToPdo(DeviceObject, Irp);
}
/* What happpened? */
if ((NT_SUCCESS(Status)) || (Status == STATUS_NOT_SUPPORTED))
{
/* Set the IRP status, unless this isn't understood */
if (Status != STATUS_NOT_SUPPORTED) Irp->IoStatus.Status = Status;
/* Pass it on */
DPRINT("Passing IRP to PDO\n");
return HalpPassIrpFromFdoToPdo(DeviceObject, Irp);
}
/* Otherwise, we failed, so set the status and complete the request */
DPRINT1("IRP failed with status: %lx\n", Status);
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status;
}
else
{
/* This is a PDO instead */
ASSERT(FdoExtension->ExtensionType == PdoExtensionType);
PdoExtension = (PPDO_EXTENSION)FdoExtension;
/* Query the IRP type */
Status = STATUS_SUCCESS;
switch (Minor)
{
case IRP_MN_START_DEVICE:
/* We only care about a PCI PDO */
DPRINT1("Start device received\n");
/* Complete the IRP normally */
break;
case IRP_MN_REMOVE_DEVICE:
/* Check if this is a PCI device */
DPRINT1("Remove device received\n");
/* We're done */
Status = STATUS_SUCCESS;
break;
case IRP_MN_SURPRISE_REMOVAL:
/* Inherit whatever status we had */
DPRINT1("Surprise removal IRP\n");
Status = Irp->IoStatus.Status;
break;
case IRP_MN_QUERY_DEVICE_RELATIONS:
/* Query the device relations */
DPRINT("Querying PDO relations\n");
Status = HalpQueryDeviceRelations(DeviceObject,
IoStackLocation->Parameters.QueryDeviceRelations.Type,
(PVOID)&Irp->IoStatus.Information);
break;
case IRP_MN_QUERY_INTERFACE:
/* Call the worker */
DPRINT("Querying interface for PDO\n");
Status = HalpQueryInterface(DeviceObject,
IoStackLocation->Parameters.QueryInterface.InterfaceType,
IoStackLocation->Parameters.QueryInterface.Size,
IoStackLocation->Parameters.QueryInterface.InterfaceSpecificData,
IoStackLocation->Parameters.QueryInterface.Version,
IoStackLocation->Parameters.QueryInterface.Interface,
(PVOID)&Irp->IoStatus.Information);
break;
case IRP_MN_QUERY_CAPABILITIES:
/* Call the worker */
DPRINT("Querying the capabilities for the PDO\n");
Status = HalpQueryCapabilities(DeviceObject,
IoStackLocation->Parameters.DeviceCapabilities.Capabilities);
break;
case IRP_MN_QUERY_RESOURCES:
/* Call the worker */
DPRINT("Querying the resources for the PDO\n");
Status = HalpQueryResources(DeviceObject, (PVOID)&Irp->IoStatus.Information);
break;
case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
/* Call the worker */
DPRINT("Querying the resource requirements for the PDO\n");
Status = HalpQueryResourceRequirements(DeviceObject,
(PVOID)&Irp->IoStatus.Information);
break;
case IRP_MN_QUERY_ID:
/* Call the worker */
DPRINT("Query the ID for the PDO\n");
Status = HalpQueryIdPdo(DeviceObject,
IoStackLocation->Parameters.QueryId.IdType,
(PVOID)&Irp->IoStatus.Information);
break;
default:
/* We don't handle anything else, so inherit the old state */
DPRINT("Illegal IRP: %lx\n", Minor);
Status = Irp->IoStatus.Status;
break;
}
/* If it's not supported, inherit the old status */
if (Status == STATUS_NOT_SUPPORTED) Status = Irp->IoStatus.Status;
/* Complete the IRP */
DPRINT("IRP completed with status: %lx\n", Status);
Irp->IoStatus.Status = Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status;
}
}
NTSTATUS
NTAPI
HalpDispatchWmi(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
DbgPrint("HAL: PnP Driver WMI!\n");
while (TRUE);
return STATUS_SUCCESS;
}
NTSTATUS
NTAPI
HalpDispatchPower(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
DbgPrint("HAL: PnP Driver Power!\n");
while (TRUE);
return STATUS_SUCCESS;
}
NTSTATUS
NTAPI
HalpDriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
NTSTATUS Status;
PDEVICE_OBJECT TargetDevice = NULL;
DPRINT("HAL: PnP Driver ENTRY!\n");
/* This is us */
HalpDriverObject = DriverObject;
/* Set up add device */
DriverObject->DriverExtension->AddDevice = HalpAddDevice;
/* Set up the callouts */
DriverObject->MajorFunction[IRP_MJ_PNP] = HalpDispatchPnp;
DriverObject->MajorFunction[IRP_MJ_POWER] = HalpDispatchPower;
DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = HalpDispatchWmi;
/* Tell the PnP about us */
Status = IoReportDetectedDevice(DriverObject,
InterfaceTypeUndefined,
-1,
-1,
NULL,
NULL,
FALSE,
&TargetDevice);
/* Now add us */
if (NT_SUCCESS(Status)) Status = HalpAddDevice(DriverObject, TargetDevice);
/* Force re-enumeration??? */
IoInvalidateDeviceRelations(TargetDevice, 0);
/* Return to kernel */
return Status;
}
NTSTATUS
NTAPI
HaliInitPnpDriver(VOID)
{
NTSTATUS Status;
UNICODE_STRING DriverString;
PAGED_CODE();
/* Create the driver */
RtlInitUnicodeString(&DriverString, L"\\Driver\\ACPI_HAL");
Status = IoCreateDriver(&DriverString, HalpDriverEntry);
/* Return status */
return Status;
}
/* EOF */

View file

@ -14,10 +14,225 @@
/* GLOBALS *******************************************************************/ /* GLOBALS *******************************************************************/
/* Share with Mm headers? */
#define MM_HAL_VA_START (PVOID)0xFFC00000
#define MM_HAL_HEAP_START (PVOID)((ULONG_PTR)MM_HAL_VA_START + (1024 * 1024))
BOOLEAN HalpPciLockSettings; BOOLEAN HalpPciLockSettings;
ULONG HalpUsedAllocDescriptors;
MEMORY_ALLOCATION_DESCRIPTOR HalpAllocationDescriptorArray[64];
PVOID HalpHeapStart = MM_HAL_HEAP_START;
/* PRIVATE FUNCTIONS *********************************************************/ /* PRIVATE FUNCTIONS *********************************************************/
ULONG
NTAPI
HalpAllocPhysicalMemory(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN ULONG MaxAddress,
IN ULONG PageCount,
IN BOOLEAN Aligned)
{
ULONG UsedDescriptors, Alignment, PhysicalAddress;
PFN_NUMBER MaxPage, BasePage;
PLIST_ENTRY NextEntry;
PMEMORY_ALLOCATION_DESCRIPTOR MdBlock, NewBlock, FreeBlock;
/* Highest page we'll go */
MaxPage = MaxAddress >> PAGE_SHIFT;
/* We need at least two blocks */
if ((HalpUsedAllocDescriptors + 2) > 64) return 0;
/* Remember how many we have now */
UsedDescriptors = HalpUsedAllocDescriptors;
/* Loop the loader block memory descriptors */
NextEntry = LoaderBlock->MemoryDescriptorListHead.Flink;
while (NextEntry != &LoaderBlock->MemoryDescriptorListHead)
{
/* Get the block */
MdBlock = CONTAINING_RECORD(NextEntry,
MEMORY_ALLOCATION_DESCRIPTOR,
ListEntry);
/* No alignment by default */
Alignment = 0;
/* Unless requested, in which case we use a 64KB block alignment */
if (Aligned) Alignment = ((MdBlock->BasePage + 0x0F) & ~0x0F) - MdBlock->BasePage;
/* Search for free memory */
if ((MdBlock->MemoryType == LoaderFree) ||
(MdBlock->MemoryType == MemoryFirmwareTemporary))
{
/* Make sure the page is within bounds, including alignment */
BasePage = MdBlock->BasePage;
if ((BasePage) &&
(MdBlock->PageCount >= PageCount + Alignment) &&
(BasePage + PageCount + Alignment < MaxPage))
{
/* We found an address */
PhysicalAddress = (BasePage + Alignment) << PAGE_SHIFT;
break;
}
}
/* Keep trying */
NextEntry = NextEntry->Flink;
}
/* If we didn't find anything, get out of here */
if (NextEntry == &LoaderBlock->MemoryDescriptorListHead) return 0;
/* Okay, now get a descriptor */
NewBlock = &HalpAllocationDescriptorArray[HalpUsedAllocDescriptors];
NewBlock->PageCount = PageCount;
NewBlock->BasePage = MdBlock->BasePage + Alignment;
NewBlock->MemoryType = LoaderHALCachedMemory;
/* Update count */
UsedDescriptors++;
HalpUsedAllocDescriptors = UsedDescriptors;
/* Check if we had any alignment */
if (Alignment)
{
/* Check if we had leftovers */
if ((MdBlock->PageCount - Alignment) != PageCount)
{
/* Get the next descriptor */
FreeBlock = &HalpAllocationDescriptorArray[UsedDescriptors];
FreeBlock->PageCount = MdBlock->PageCount - Alignment - PageCount;
FreeBlock->BasePage = MdBlock->BasePage + Alignment + PageCount;
/* One more */
HalpUsedAllocDescriptors++;
/* Insert it into the list */
InsertHeadList(&MdBlock->ListEntry, &FreeBlock->ListEntry);
}
/* Use this descriptor */
NewBlock->PageCount = Alignment;
InsertHeadList(&MdBlock->ListEntry, &NewBlock->ListEntry);
}
else
{
/* Consume memory from this block */
MdBlock->BasePage += PageCount;
MdBlock->PageCount -= PageCount;
/* Insert the descriptor */
InsertTailList(&MdBlock->ListEntry, &NewBlock->ListEntry);
/* Remove the entry if the whole block was allocated */
if (!MdBlock->PageCount == 0) RemoveEntryList(&MdBlock->ListEntry);
}
/* Return the address */
return PhysicalAddress;
}
PVOID
NTAPI
HalpMapPhysicalMemory64(IN PHYSICAL_ADDRESS PhysicalAddress,
IN ULONG PageCount)
{
PHARDWARE_PTE PointerPte;
ULONG UsedPages = 0;
PVOID VirtualAddress, BaseAddress;
/* Start at the current HAL heap base */
BaseAddress = HalpHeapStart;
/* Loop until we have all the pages required */
while (UsedPages < PageCount)
{
/* Begin a new loop cycle */
UsedPages = 0;
VirtualAddress = BaseAddress;
/* If this overflows past the HAL heap, it means there's no space */
if (BaseAddress == NULL) return NULL;
/* Loop until we have all the pages required in a single run */
while (UsedPages < PageCount)
{
/* Get the PTE for this address and check if it's available */
PointerPte = HalAddressToPte(VirtualAddress);
if (*(PULONG)PointerPte)
{
/* PTE has data, skip it and start with a new base address */
BaseAddress = (PVOID)((ULONG_PTR)VirtualAddress + PAGE_SIZE);
break;
}
/* PTE is available, keep going on this run */
VirtualAddress = (PVOID)((ULONG_PTR)VirtualAddress + PAGE_SIZE);
UsedPages++;
}
}
/* Take the base address of the page plus the actual offset in the address */
VirtualAddress = (PVOID)((ULONG_PTR)BaseAddress +
BYTE_OFFSET(PhysicalAddress.LowPart));
/* If we are starting at the heap, move the heap */
if (BaseAddress == HalpHeapStart)
{
/* Past this allocation */
HalpHeapStart = (PVOID)((ULONG_PTR)BaseAddress + (PageCount * PAGE_SIZE));
}
/* Loop pages that can be mapped */
while (UsedPages--)
{
/* Fill out the PTE */
PointerPte = HalAddressToPte(BaseAddress);
PointerPte->PageFrameNumber = PhysicalAddress.QuadPart >> PAGE_SHIFT;
PointerPte->Valid = 1;
PointerPte->Write = 1;
/* Move to the next address */
PhysicalAddress.QuadPart += PAGE_SIZE;
BaseAddress = (PVOID)((ULONG_PTR)BaseAddress + PAGE_SIZE);
}
/* Flush the TLB and return the address */
HalpFlushTLB();
return VirtualAddress;
}
VOID
NTAPI
HalpUnmapVirtualAddress(IN PVOID VirtualAddress,
IN ULONG PageCount)
{
PHARDWARE_PTE PointerPte;
ULONG i;
/* Only accept valid addresses */
if (VirtualAddress < MM_HAL_VA_START) return;
/* Align it down to page size */
VirtualAddress = (PVOID)((ULONG_PTR)VirtualAddress & ~(PAGE_SIZE - 1));
/* Loop PTEs */
PointerPte = HalAddressToPte(VirtualAddress);
for (i = 0; i < PageCount; i++)
{
*(PULONG)PointerPte = 0;
PointerPte++;
}
/* Flush the TLB */
HalpFlushTLB();
/* Put the heap back */
if (HalpHeapStart > VirtualAddress) HalpHeapStart = VirtualAddress;
}
VOID VOID
NTAPI NTAPI
HalpGetParameters(IN PLOADER_PARAMETER_BLOCK LoaderBlock) HalpGetParameters(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
@ -92,6 +307,9 @@ HalInitSystem(IN ULONG BootPhase,
} }
#ifndef _MINIHAL_ #ifndef _MINIHAL_
/* Initialize ACPI */
HalpSetupAcpiPhase0(LoaderBlock);
/* Initialize the PICs */ /* Initialize the PICs */
HalpInitializePICs(TRUE); HalpInitializePICs(TRUE);
#endif #endif

View file

@ -0,0 +1,27 @@
/*
* PROJECT: ReactOS HAL
* LICENSE: BSD - See COPYING.ARM in the top level directory
* FILE: hal/halx86/generic/acpi/halpcat.c
* PURPOSE: HAL Legacy Support Code
* PROGRAMMERS: ReactOS Portable Systems Group
*/
/* INCLUDES *******************************************************************/
#include <hal.h>
#define NDEBUG
#include <debug.h>
/* GLOBALS ********************************************************************/
/* PRIVATE FUNCTIONS **********************************************************/
NTSTATUS
NTAPI
HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
/* There is no ACPI on these HALs */
return STATUS_NO_SUCH_DEVICE;
}
/* EOF */

View file

@ -18,6 +18,47 @@ BOOLEAN HalpNMIInProgress;
/* PRIVATE FUNCTIONS **********************************************************/ /* PRIVATE FUNCTIONS **********************************************************/
NTSTATUS
NTAPI
HalpOpenRegistryKey(IN PHANDLE KeyHandle,
IN HANDLE RootKey,
IN PUNICODE_STRING KeyName,
IN ACCESS_MASK DesiredAccess,
IN BOOLEAN Create)
{
NTSTATUS Status;
ULONG Disposition;
OBJECT_ATTRIBUTES ObjectAttributes;
/* Setup the attributes we received */
InitializeObjectAttributes(&ObjectAttributes,
KeyName,
OBJ_CASE_INSENSITIVE,
RootKey,
NULL);
/* What to do? */
if ( Create )
{
/* Create the key */
Status = ZwCreateKey(KeyHandle,
DesiredAccess,
&ObjectAttributes,
0,
NULL,
REG_OPTION_VOLATILE,
&Disposition);
}
else
{
/* Open the key */
Status = ZwOpenKey(KeyHandle, DesiredAccess, &ObjectAttributes);
}
/* We're done */
return Status;
}
VOID VOID
NTAPI NTAPI
HalpCheckPowerButton(VOID) HalpCheckPowerButton(VOID)
@ -28,32 +69,6 @@ HalpCheckPowerButton(VOID)
return; return;
} }
#ifndef _MINIHAL_
PVOID
NTAPI
HalpMapPhysicalMemory64(IN PHYSICAL_ADDRESS PhysicalAddress,
IN ULONG NumberPage)
{
//
// Use kernel memory manager I/O map facilities
//
return MmMapIoSpace(PhysicalAddress,
NumberPage << PAGE_SHIFT,
MmNonCached);
}
VOID
NTAPI
HalpUnmapVirtualAddress(IN PVOID VirtualAddress,
IN ULONG NumberPages)
{
//
// Use kernel memory manager I/O map facilities
//
MmUnmapIoSpace(VirtualAddress, NumberPages << PAGE_SHIFT);
}
#endif
VOID VOID
NTAPI NTAPI
HalpFlushTLB(VOID) HalpFlushTLB(VOID)

View file

@ -8,7 +8,7 @@
<include base="ntoskrnl">include</include> <include base="ntoskrnl">include</include>
<define name="_NTHALDLL_" /> <define name="_NTHALDLL_" />
<define name="_NTHAL_" /> <define name="_NTHAL_" />
<library>hal_generic</library> <library>hal_generic_legacy</library>
<library>hal_generic_up</library> <library>hal_generic_up</library>
<library>ntoskrnl</library> <library>ntoskrnl</library>
<library>libcntpr</library> <library>libcntpr</library>

View file

@ -1,12 +1,15 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd"> <!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
<group> <group>
<module name="hal_generic" type="objectlibrary"> <module name="hal_generic_legacy" type="objectlibrary">
<include>include</include> <include>include</include>
<include base="ntoskrnl">include</include> <include base="ntoskrnl">include</include>
<define name="_NTHALDLL_" /> <define name="_NTHALDLL_" />
<define name="_NTHAL_" /> <define name="_NTHAL_" />
<directory name="generic"> <directory name="generic">
<directory name="legacy">
<file>halpcat.c</file>
</directory>
<directory name="bus"> <directory name="bus">
<file>bushndlr.c</file> <file>bushndlr.c</file>
<file>isabus.c</file> <file>isabus.c</file>
@ -47,7 +50,57 @@
</directory> </directory>
</module> </module>
<module name="mini_hal" type="objectlibrary"> <module name="hal_generic_acpi" type="objectlibrary">
<include>include</include>
<include base="ntoskrnl">include</include>
<define name="_NTHALDLL_" />
<define name="_NTHAL_" />
<directory name="generic">
<directory name="acpi">
<file>halacpi.c</file>
<file>halpnpdd.c</file>
</directory>
<directory name="bus">
<file>bushndlr.c</file>
<file>isabus.c</file>
<file>halbus.c</file>
<file>pcibus.c</file>
<file>pcidata.c</file>
<file>sysbus.c</file>
</directory>
<file>beep.c</file>
<file>bios.c</file>
<file>cmos.c</file>
<file>display.c</file>
<file>dma.c</file>
<file>drive.c</file>
<file>halinit.c</file>
<file>misc.c</file>
<file>profil.c</file>
<file>reboot.c</file>
<file>sysinfo.c</file>
<file>timer.c</file>
<file>usage.c</file>
<if property="ARCH" value="i386">
<directory name="i386">
<file>portio.c</file>
<file>systimer.S</file>
<file>trap.S</file>
</directory>
</if>
<if property="ARCH" value="amd64">
<directory name="amd64">
<file>x86bios.c</file>
<file>systimer.S</file>
</directory>
</if>
</directory>
<directory name="include">
<pch>hal.h</pch>
</directory>
</module>
<module name="mini_hal" type="objectlibrary" crt="static">
<include>include</include> <include>include</include>
<include base="ntoskrnl">include</include> <include base="ntoskrnl">include</include>
<define name="_NTHALDLL_" /> <define name="_NTHALDLL_" />

20
hal/halx86/halacpi.rbuild Normal file
View file

@ -0,0 +1,20 @@
<?xml version="1.0"?>
<!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
<group xmlns:xi="http://www.w3.org/2001/XInclude">
<module name="halacpi" type="kernelmodedll" entrypoint="HalInitSystem@8" installbase="system32" installname="halacpi.dll">
<importlibrary base="hal" definition="../hal.pspec" />
<bootstrap installbase="$(CDOUTPUT)" />
<include>include</include>
<include base="ntoskrnl">include</include>
<define name="_NTHALDLL_" />
<define name="_NTHAL_" />
<library>hal_generic_acpi</library>
<library>hal_generic_up</library>
<library>ntoskrnl</library>
<library>libcntpr</library>
<directory name="up">
<file>halinit_up.c</file>
<file>halup.rc</file>
</directory>
</module>
</group>

View file

@ -10,7 +10,7 @@
<define name="_DISABLE_TIDENTS" /> <define name="_DISABLE_TIDENTS" />
<define name="_NTHAL_" /> <define name="_NTHAL_" />
<define name="_X86BIOS_" /> <define name="_X86BIOS_" />
<library>hal_generic</library> <library>hal_generic_acpi</library>
<library>hal_generic_up</library> <library>hal_generic_up</library>
<library>ntoskrnl</library> <library>ntoskrnl</library>
<!-- library>x86emu</library --> <!-- library>x86emu</library -->

View file

@ -9,7 +9,7 @@
<define name="CONFIG_SMP" /> <define name="CONFIG_SMP" />
<define name="_NTHALDLL_" /> <define name="_NTHALDLL_" />
<define name="_NTHAL_" /> <define name="_NTHAL_" />
<library>hal_generic</library> <library>hal_generic_legacy</library>
<library>hal_generic_mp</library> <library>hal_generic_mp</library>
<library>ntoskrnl</library> <library>ntoskrnl</library>
<library>libcntpr</library> <library>libcntpr</library>

View file

@ -8,7 +8,7 @@
<define name="_NTHALDLL_" /> <define name="_NTHALDLL_" />
<define name="_NTHAL_" /> <define name="_NTHAL_" />
<define name="SARCH_XBOX" /> <define name="SARCH_XBOX" />
<library>hal_generic</library> <library>hal_generic_legacy</library>
<library>hal_generic_up</library> <library>hal_generic_up</library>
<library>ntoskrnl</library> <library>ntoskrnl</library>
<library>libcntpr</library> <library>libcntpr</library>

View file

@ -48,5 +48,6 @@
#include "halp.h" #include "halp.h"
#include "mps.h" #include "mps.h"
#include "ioapic.h" #include "ioapic.h"
#include "halacpi.h"
/* EOF */ /* EOF */

View file

@ -0,0 +1,237 @@
#pragma once
//
// Should be shared with FreeLDR
//
typedef struct _ACPI_E820_ENTRY
{
PHYSICAL_ADDRESS Base;
LARGE_INTEGER Length;
ULONGLONG Type;
} ACPI_E820_ENTRY, *PACPI_E820_ENTRY;
typedef struct _ACPI_BIOS_MULTI_NODE
{
PHYSICAL_ADDRESS RsdtAddress;
ULONGLONG Count;
ACPI_E820_ENTRY E820Entry[1];
} ACPI_BIOS_MULTI_NODE, *PACPI_BIOS_MULTI_NODE;
//
// ACPI Signatures
//
#define RSDP_SIGNATURE 0x2052545020445352 // "RSD PTR "
#define FACS_SIGNATURE 0x53434146 // "FACS"
#define FADT_SIGNATURE 0x50434146 // "FACP"
#define RSDT_SIGNATURE 0x54445352 // "RSDT"
#define APIC_SIGNATURE 0x43495041 // "APIC"
#define DSDT_SIGNATURE 0x54445344 // "DSDT"
#define SSDT_SIGNATURE 0x54445353 // "SSDT"
#define PSDT_SIGNATURE 0x54445350 // "PSDT"
#define SBST_SIGNATURE 0x54534253 // "SBST"
#define DBGP_SIGNATURE 0x50474244 // "DBGP"
#define XSDT_SIGNATURE 'TDSX'
#define BOOT_SIGNATURE 'TOOB'
#define SRAT_SIGNATURE 'TARS'
//
// FADT Flags
//
#define ACPI_TMR_VAL_EXT 0x100
//
// ACPI Generic Register Address
//
typedef struct _GEN_ADDR
{
UCHAR AddressSpaceID;
UCHAR BitWidth;
UCHAR BitOffset;
UCHAR Reserved;
PHYSICAL_ADDRESS Address;
} GEN_ADDR, *PGEN_ADDR;
//
// ACPI BIOS Structures (packed)
//
#include <pshpack1.h>
typedef struct _RSDP
{
ULONGLONG Signature;
UCHAR Checksum;
UCHAR OEMID[6];
UCHAR Reserved[1];
ULONG RsdtAddress;
} RSDP;
typedef RSDP *PRSDP;
typedef struct _DESCRIPTION_HEADER
{
ULONG Signature;
ULONG Length;
UCHAR Revision;
UCHAR Checksum;
UCHAR OEMID[6];
UCHAR OEMTableID[8];
ULONG OEMRevision;
UCHAR CreatorID[4];
ULONG CreatorRev;
} DESCRIPTION_HEADER;
typedef DESCRIPTION_HEADER *PDESCRIPTION_HEADER;
typedef struct _FACS
{
ULONG Signature;
ULONG Length;
ULONG HardwareSignature;
ULONG pFirmwareWakingVector;
ULONG GlobalLock;
ULONG Flags;
PHYSICAL_ADDRESS x_FirmwareWakingVector;
UCHAR version;
UCHAR Reserved[32];
} FACS;
typedef FACS *PFACS;
typedef struct _FADT
{
DESCRIPTION_HEADER Header;
ULONG facs;
ULONG dsdt;
UCHAR int_model;
UCHAR pm_profile;
USHORT sci_int_vector;
ULONG smi_cmd_io_port;
UCHAR acpi_on_value;
UCHAR acpi_off_value;
UCHAR s4bios_req;
UCHAR pstate_control;
ULONG pm1a_evt_blk_io_port;
ULONG pm1b_evt_blk_io_port;
ULONG pm1a_ctrl_blk_io_port;
ULONG pm1b_ctrl_blk_io_port;
ULONG pm2_ctrl_blk_io_port;
ULONG pm_tmr_blk_io_port;
ULONG gp0_blk_io_port;
ULONG gp1_blk_io_port;
UCHAR pm1_evt_len;
UCHAR pm1_ctrl_len;
UCHAR pm2_ctrl_len;
UCHAR pm_tmr_len;
UCHAR gp0_blk_len;
UCHAR gp1_blk_len;
UCHAR gp1_base;
UCHAR cstate_control;
USHORT lvl2_latency;
USHORT lvl3_latency;
USHORT flush_size;
USHORT flush_stride;
UCHAR duty_offset;
UCHAR duty_width;
UCHAR day_alarm_index;
UCHAR month_alarm_index;
UCHAR century_alarm_index;
USHORT boot_arch;
UCHAR reserved3[1];
ULONG flags;
GEN_ADDR reset_reg;
UCHAR reset_val;
UCHAR reserved4[3];
PHYSICAL_ADDRESS x_firmware_ctrl;
PHYSICAL_ADDRESS x_dsdt;
GEN_ADDR x_pm1a_evt_blk;
GEN_ADDR x_pm1b_evt_blk;
GEN_ADDR x_pm1a_ctrl_blk;
GEN_ADDR x_pm1b_ctrl_blk;
GEN_ADDR x_pm2_ctrl_blk;
GEN_ADDR x_pm_tmr_blk;
GEN_ADDR x_gp0_blk;
GEN_ADDR x_gp1_blk;
} FADT;
typedef FADT *PFADT;
typedef struct _DSDT
{
DESCRIPTION_HEADER Header;
UCHAR DiffDefBlock[ANYSIZE_ARRAY];
} DSDT;
typedef DSDT *PDSDT;
typedef struct _RSDT
{
DESCRIPTION_HEADER Header;
ULONG Tables[ANYSIZE_ARRAY];
} RSDT;
typedef RSDT *PRSDT;
typedef struct _XSDT
{
DESCRIPTION_HEADER Header;
PHYSICAL_ADDRESS Tables[ANYSIZE_ARRAY];
} XSDT;
typedef XSDT *PXSDT;
#include <poppack.h>
//
// Microsoft-specific (pretty much) ACPI Tables, normal MS ABI packing
//
typedef struct _DEBUG_PORT_TABLE
{
DESCRIPTION_HEADER Header;
UCHAR InterfaceType;
UCHAR Reserved[3];
GEN_ADDR BaseAddress;
} DEBUG_PORT_TABLE, *PDEBUG_PORT_TABLE;
typedef struct _BOOT_TABLE
{
DESCRIPTION_HEADER Header;
UCHAR CMOSIndex;
UCHAR Reserved[3];
} BOOT_TABLE, *PBOOT_TABLE;
typedef struct _ACPI_SRAT
{
DESCRIPTION_HEADER Header;
UCHAR TableRevision;
ULONG Reserved[2];
} ACPI_SRAT, *PACPI_SRAT;
//
// Internal HAL structure
//
typedef struct _ACPI_CACHED_TABLE
{
LIST_ENTRY Links;
DESCRIPTION_HEADER Header;
// table follows
// ...
} ACPI_CACHED_TABLE, *PACPI_CACHED_TABLE;
NTSTATUS
NTAPI
HalpAcpiTableCacheInit(
IN PLOADER_PARAMETER_BLOCK LoaderBlock
);
PVOID
NTAPI
HalpAcpiGetTable(
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN ULONG Signature
);
NTSTATUS
NTAPI
HalpSetupAcpiPhase0(
IN PLOADER_PARAMETER_BLOCK LoaderBlock
);
PVOID
NTAPI
HalAcpiGetTable(
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN ULONG Signature
);
/* EOF */

View file

@ -681,7 +681,31 @@ HalpReleaseCmosSpinLock(
VOID VOID
); );
ULONG
NTAPI
HalpAllocPhysicalMemory(
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN ULONG MaxAddress,
IN ULONG PageCount,
IN BOOLEAN Aligned
);
PVOID
NTAPI
HalpMapPhysicalMemory64(
IN PHYSICAL_ADDRESS PhysicalAddress,
IN ULONG PageCount
);
NTSTATUS
NTAPI
HalpOpenRegistryKey(
IN PHANDLE KeyHandle,
IN HANDLE RootKey,
IN PUNICODE_STRING KeyName,
IN ACCESS_MASK DesiredAccess,
IN BOOLEAN Create
);
VOID VOID
FASTCALL FASTCALL

View file

@ -184,7 +184,7 @@ allow GCC to optimize away some EH unwind code, at least in DW2 case. */
#define USE_MINGW_SETJMP_TWO_ARGS #define USE_MINGW_SETJMP_TWO_ARGS
#endif #endif
/* Diable deprecation for now! */ /* Disable deprecation for now! */
#define _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE_CORE #define _CRT_SECURE_NO_DEPRECATE_CORE
#ifdef __WINESRC__ #ifdef __WINESRC__
@ -197,5 +197,7 @@ allow GCC to optimize away some EH unwind code, at least in DW2 case. */
#define _CRT_UNUSED(x) (void)x #define _CRT_UNUSED(x) (void)x
#endif #endif
#include "_mingw_mac.h"
#endif /* !_INC_MINGW */ #endif /* !_INC_MINGW */

134
include/crt/_mingw_mac.h Normal file
View file

@ -0,0 +1,134 @@
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the w64 mingw-runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#ifndef _INC_CRTDEFS_MACRO
#define _INC_CRTDEFS_MACRO
#define __STRINGIFY(x) #x
#define __MINGW64_STRINGIFY(x) __STRINGIFY(x)
#define __MINGW64_VERSION_MAJOR 1
#define __MINGW64_VERSION_MINOR 1
#define __MINGW64_VERSION_STR __MINGW64_STRINGIFY(__MINGW64_VERSION_MAJOR) "." __MINGW64_STRINGIFY(__MINGW64_VERSION_MINOR)
#define __MINGW64_VERSION_STATE "alpha"
/* mingw.org's version macros: these make gcc to define
MINGW32_SUPPORTS_MT_EH and to use the _CRT_MT global
and the __mingwthr_key_dtor() function from the MinGW
CRT in its private gthr-win32.h header. */
#define __MINGW32_MAJOR_VERSION 3
#define __MINGW32_MINOR_VERSION 11
#ifdef _WIN64
/* MS does not prefix symbols by underscores for 64-bit. */
#ifndef __MINGW_USE_UNDERSCORE_PREFIX
/* As we have to support older gcc version, which are using underscores
as symbol prefix for x64, we have to check here for the user label
prefix defined by gcc. */
#ifdef __USER_LABEL_PREFIX__
#pragma push_macro ("_")
#undef _
#define _ 1
#if (__USER_LABEL_PREFIX__ + 0) != 0
#define __MINGW_USE_UNDERSCORE_PREFIX 1
#else
#define __MINGW_USE_UNDERSCORE_PREFIX 0
#endif
#undef _
#pragma pop_macro ("_")
#else
#define __MINGW_USE_UNDERSCORE_PREFIX 0
#endif
#endif
#else
/* For 32-bits we have always to prefix by underscore. */
#undef __MINGW_USE_UNDERSCORE_PREFIX
#define __MINGW_USE_UNDERSCORE_PREFIX 1
#endif
#if __MINGW_USE_UNDERSCORE_PREFIX == 0
#define __MINGW_IMP_SYMBOL(sym) __imp_##sym
#define __MINGW_USYMBOL(sym) sym
#define __MINGW_LSYMBOL(sym) _##sym
#else
#define __MINGW_IMP_SYMBOL(sym) _imp__##sym
#define __MINGW_USYMBOL(sym) _##sym
#define __MINGW_LSYMBOL(sym) sym
#endif
/* Use alias for msvcr80 export of get/set_output_format. */
#ifndef __USE_MINGW_OUTPUT_FORMAT_EMU
#define __USE_MINGW_OUTPUT_FORMAT_EMU 1
#endif
/* Set VC specific compiler target macros. */
#if defined(__x86_64) && defined(_X86_)
#undef _X86_ /* _X86_ is not for __x86_64 */
#endif
#if defined(_X86_) && !defined(_M_IX86) && !defined(_M_IA64) \
&& !defined(_M_AMD64) && !defined(__x86_64)
#if defined(__i486__)
#define _M_IX86 400
#elif defined(__i586__)
#define _M_IX86 500
#else
/* This gives wrong (600 instead of 300) value if -march=i386 is specified
but we cannot check for__i386__ as it is defined for all 32-bit CPUs. */
#define _M_IX86 600
#endif
#endif
#if defined(__x86_64) && !defined(_M_IX86) && !defined(_M_IA64) \
&& !defined(_M_AMD64)
#define _M_AMD64 100
#define _M_X64 100
#endif
#if defined(__ia64__) && !defined(_M_IX86) && !defined(_M_IA64) \
&& !defined(_M_AMD64) && !defined(_X86_) && !defined(__x86_64)
#define _M_IA64 100
#endif
#ifndef __PTRDIFF_TYPE__
#ifdef _WIN64
#define __PTRDIFF_TYPE__ long long int
#else
#define __PTRDIFF_TYPE__ long int
#endif
#endif
#ifndef __SIZE_TYPE__
#ifdef _WIN64
#define __SIZE_TYPE__ long long unsigned int
#else
#define __SIZE_TYPE__ long unsigned int
#endif
#endif
#ifndef __WCHAR_TYPE__
#define __WCHAR_TYPE__ unsigned short
#endif
#ifndef __WINT_TYPE__
#define __WINT_TYPE__ unsigned short
#endif
#if defined(__GNUC__) || defined(__GNUG__)
#define __MINGW_EXTENSION __extension__
#else
#define __MINGW_EXTENSION
#endif
#ifdef UNICODE
# define __MINGW_NAME_AW(func) func##W
#else
# define __MINGW_NAME_AW(func) func##A
#endif
#define __MINGW_TYPEDEF_AW(type) \
typedef __MINGW_NAME_AW(type) type;
#endif /* _INC_CRTDEFS_MACRO */

View file

@ -25,6 +25,7 @@
//#define NO_OLDNAMES //#define NO_OLDNAMES
//#endif //#endif
/** Properties ***************************************************************/ /** Properties ***************************************************************/
#undef _CRT_PACKING #undef _CRT_PACKING
@ -50,12 +51,14 @@
#endif #endif
#ifndef _CRTIMP #ifndef _CRTIMP
#ifdef _DLL #ifdef CRTDLL /* Defined for ntdll, crtdll, msvcrt, etc */
#define _CRTIMP __declspec(dllexport)
#elif defined(_DLL)
#define _CRTIMP __declspec(dllimport) #define _CRTIMP __declspec(dllimport)
#else #else /* !CRTDLL && !_DLL */
#define _CRTIMP #define _CRTIMP
#endif #endif /* CRTDLL || _DLL */
#endif #endif /* !_CRTIMP */
//#define _CRT_ALTERNATIVE_INLINES //#define _CRT_ALTERNATIVE_INLINES
@ -218,6 +221,7 @@
#define _CRT_OBSOLETE(_NewItem) #define _CRT_OBSOLETE(_NewItem)
#endif #endif
/** Constants ****************************************************************/ /** Constants ****************************************************************/
#define _ARGMAX 100 #define _ARGMAX 100
@ -231,7 +235,6 @@
#define _SECURECRT_FILL_BUFFER_PATTERN 0xFD #define _SECURECRT_FILL_BUFFER_PATTERN 0xFD
/** Type definitions *********************************************************/ /** Type definitions *********************************************************/
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -38,7 +38,7 @@ extern "C" {
#ifndef _CRT_WCTYPEDATA_DEFINED #ifndef _CRT_WCTYPEDATA_DEFINED
#define _CRT_WCTYPEDATA_DEFINED #define _CRT_WCTYPEDATA_DEFINED
# ifndef _CTYPE_DISABLE_MACROS # ifndef _CTYPE_DISABLE_MACROS
_CRTDATA(extern unsigned short *_wctype); _CRTDATA(extern const unsigned short _wctype[]);
_CRTIMP const wctype_t * __cdecl __pwctype_func(void); _CRTIMP const wctype_t * __cdecl __pwctype_func(void);
# ifndef _M_CEE_PURE # ifndef _M_CEE_PURE
_CRTDATA(extern const wctype_t *_pwctype); _CRTDATA(extern const wctype_t *_pwctype);

View file

@ -74,6 +74,10 @@ extern "C" {
#define _AddressOfReturnAddress() (&(((void **)(__builtin_frame_address(0)))[1])) #define _AddressOfReturnAddress() (&(((void **)(__builtin_frame_address(0)))[1]))
/* TODO: __getcallerseflags but how??? */ /* TODO: __getcallerseflags but how??? */
/* Maybe the same for x86? */
#ifdef _x86_64
#define _alloca(s) __builtin_alloca(s)
#endif
/*** Atomic operations ***/ /*** Atomic operations ***/
@ -565,6 +569,18 @@ __INTRIN_INLINE void __stosd(unsigned long * Dest, const unsigned long Data, siz
); );
} }
#ifdef _M_AMD64
__INTRIN_INLINE void __stosq(unsigned __int64 * Dest, const unsigned __int64 Data, size_t Count)
{
__asm__ __volatile__
(
"rep; stosq" :
[Dest] "=D" (Dest), [Count] "=c" (Count) :
"[Dest]" (Dest), "a" (Data), "[Count]" (Count)
);
}
#endif
__INTRIN_INLINE void __movsb(unsigned char * Destination, const unsigned char * Source, size_t Count) __INTRIN_INLINE void __movsb(unsigned char * Destination, const unsigned char * Source, size_t Count)
{ {
__asm__ __volatile__ __asm__ __volatile__
@ -595,6 +611,18 @@ __INTRIN_INLINE void __movsd(unsigned long * Destination, const unsigned long *
); );
} }
#ifdef _M_AMD64
__INTRIN_INLINE void __movsq(unsigned long * Destination, const unsigned long * Source, size_t Count)
{
__asm__ __volatile__
(
"rep; movsq" :
[Destination] "=D" (Destination), [Source] "=S" (Source), [Count] "=c" (Count) :
"[Destination]" (Destination), "[Source]" (Source), "[Count]" (Count)
);
}
#endif
#if defined(_M_AMD64) #if defined(_M_AMD64)
/*** GS segment addressing ***/ /*** GS segment addressing ***/
@ -787,6 +815,20 @@ __INTRIN_INLINE unsigned char _bittest(const long * const a, const long b)
return retval; return retval;
} }
#ifdef _M_AMD64
__INTRIN_INLINE unsigned char _bittest64(const __int64 * const a, const __int64 b)
{
unsigned char retval;
if(__builtin_constant_p(b))
__asm__("bt %[b], %[a]; setb %b[retval]" : [retval] "=q" (retval) : [a] "mr" (*(a + (b / 64))), [b] "Ir" (b % 64));
else
__asm__("bt %[b], %[a]; setb %b[retval]" : [retval] "=q" (retval) : [a] "mr" (*a), [b] "r" (b));
return retval;
}
#endif
__INTRIN_INLINE unsigned char _bittestandcomplement(long * const a, const long b) __INTRIN_INLINE unsigned char _bittestandcomplement(long * const a, const long b)
{ {
unsigned char retval; unsigned char retval;

View file

@ -535,7 +535,7 @@ extern "C" {
_CRTIMP int __cdecl putenv(const char *_EnvString); _CRTIMP int __cdecl putenv(const char *_EnvString);
_CRTIMP void __cdecl swab(char *_Buf1,char *_Buf2,int _SizeInBytes); _CRTIMP void __cdecl swab(char *_Buf1,char *_Buf2,int _SizeInBytes);
_CRTIMP char *__cdecl ultoa(unsigned long _Val,char *_Dstbuf,int _Radix); _CRTIMP char *__cdecl ultoa(unsigned long _Val,char *_Dstbuf,int _Radix);
_CRTIMP onexit_t __cdecl onexit(onexit_t _Func); onexit_t __cdecl onexit(onexit_t _Func);
#endif #endif
#endif #endif

View file

@ -624,9 +624,7 @@ extern "C" {
#define _tcscpy_s strcpy_s #define _tcscpy_s strcpy_s
#define _tcsdup _strdup #define _tcsdup _strdup
#define _tcslen strlen #define _tcslen strlen
#if 0
#define _tcsnlen strnlen #define _tcsnlen strnlen
#endif
#define _tcsxfrm strxfrm #define _tcsxfrm strxfrm
#define _tcsxfrm_l _strxfrm_l #define _tcsxfrm_l _strxfrm_l
#define _tcserror strerror #define _tcserror strerror

View file

@ -104,33 +104,33 @@ typedef struct _ARC_FILTER
} ARC_FILTER,*PARC_FILTER; } ARC_FILTER,*PARC_FILTER;
BOOLEAN BOOLEAN
DDKAPI NTAPI
ArcCreateFilter( ArcCreateFilter(
IN struct _NDIS_MINIPORT_BLOCK *Miniport, IN struct _NDIS_MINIPORT_BLOCK *Miniport,
IN UCHAR AdapterAddress, IN UCHAR AdapterAddress,
OUT PARC_FILTER *Filter); OUT PARC_FILTER *Filter);
VOID VOID
DDKAPI NTAPI
ArcDeleteFilter( ArcDeleteFilter(
IN PARC_FILTER Filter); IN PARC_FILTER Filter);
BOOLEAN BOOLEAN
DDKAPI NTAPI
ArcNoteFilterOpenAdapter( ArcNoteFilterOpenAdapter(
IN PARC_FILTER Filter, IN PARC_FILTER Filter,
IN NDIS_HANDLE NdisBindingHandle, IN NDIS_HANDLE NdisBindingHandle,
OUT PNDIS_HANDLE NdisFilterHandle); OUT PNDIS_HANDLE NdisFilterHandle);
NDIS_STATUS NDIS_STATUS
DDKAPI NTAPI
ArcDeleteFilterOpenAdapter( ArcDeleteFilterOpenAdapter(
IN PARC_FILTER Filter, IN PARC_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle, IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest); IN PNDIS_REQUEST NdisRequest);
NDIS_STATUS NDIS_STATUS
DDKAPI NTAPI
ArcFilterAdjust( ArcFilterAdjust(
IN PARC_FILTER Filter, IN PARC_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle, IN NDIS_HANDLE NdisFilterHandle,
@ -139,12 +139,12 @@ ArcFilterAdjust(
IN BOOLEAN Set); IN BOOLEAN Set);
VOID VOID
DDKAPI NTAPI
ArcFilterDprIndicateReceiveComplete( ArcFilterDprIndicateReceiveComplete(
IN PARC_FILTER Filter); IN PARC_FILTER Filter);
VOID VOID
DDKAPI NTAPI
ArcFilterDprIndicateReceive( ArcFilterDprIndicateReceive(
IN PARC_FILTER Filter, IN PARC_FILTER Filter,
IN PUCHAR pRawHeader, IN PUCHAR pRawHeader,
@ -152,7 +152,7 @@ ArcFilterDprIndicateReceive(
IN UINT Length); IN UINT Length);
NDIS_STATUS NDIS_STATUS
DDKAPI NTAPI
ArcFilterTransferData( ArcFilterTransferData(
IN PARC_FILTER Filter, IN PARC_FILTER Filter,
IN NDIS_HANDLE MacReceiveContext, IN NDIS_HANDLE MacReceiveContext,
@ -162,18 +162,18 @@ ArcFilterTransferData(
OUT PUINT BytesTransfered); OUT PUINT BytesTransfered);
VOID VOID
DDKAPI NTAPI
ArcFreeNdisPacket( ArcFreeNdisPacket(
IN PARC_PACKET Packet); IN PARC_PACKET Packet);
VOID VOID
DDKAPI NTAPI
ArcFilterDoIndication( ArcFilterDoIndication(
IN PARC_FILTER Filter, IN PARC_FILTER Filter,
IN PARC_PACKET Packet); IN PARC_PACKET Packet);
VOID VOID
DDKAPI NTAPI
ArcDestroyPacket( ArcDestroyPacket(
IN PARC_FILTER Filter, IN PARC_FILTER Filter,
IN PARC_PACKET Packet); IN PARC_PACKET Packet);

View file

@ -1,3 +1,7 @@
#pragma once
#if (NTDDI_VERSION >= NTDDI_WINXP)
#if defined(__cplusplus) #if defined(__cplusplus)
extern "C" { extern "C" {
#endif #endif
@ -12,12 +16,16 @@ extern "C" {
#endif #endif
#define STDMETHODCALLTYPE __stdcall #define STDMETHODCALLTYPE __stdcall
#ifndef _WDMDDK_
typedef GUID *PGUID; typedef GUID *PGUID;
#endif
/* Types */ /* Types */
typedef struct _BDA_PIN_PAIRING typedef ULONG BDA_TOPOLOGY_JOINT, *PBDA_TOPOLOGY_JOINT;
{
typedef struct _BDA_PIN_PAIRING {
ULONG ulInputPin; ULONG ulInputPin;
ULONG ulOutputPin; ULONG ulOutputPin;
ULONG ulcMaxInputsPerOutput; ULONG ulcMaxInputsPerOutput;
@ -28,19 +36,22 @@ typedef struct _BDA_PIN_PAIRING
const ULONG *pTopologyJoints; const ULONG *pTopologyJoints;
} BDA_PIN_PAIRING, *PBDA_PIN_PAIRING; } BDA_PIN_PAIRING, *PBDA_PIN_PAIRING;
typedef struct _BDA_FILTER_TEMPLATE typedef struct _BDA_FILTER_TEMPLATE {
{
const KSFILTER_DESCRIPTOR *pFilterDescriptor; const KSFILTER_DESCRIPTOR *pFilterDescriptor;
ULONG ulcPinPairs; ULONG ulcPinPairs;
const BDA_PIN_PAIRING *pPinPairs; const BDA_PIN_PAIRING *pPinPairs;
} BDA_FILTER_TEMPLATE, *PBDA_FILTER_TEMPLATE; } BDA_FILTER_TEMPLATE, *PBDA_FILTER_TEMPLATE;
typedef struct _KSM_PIN_PAIR {
typedef struct _KSM_PIN
{
KSMETHOD Method; KSMETHOD Method;
__GNU_EXTENSION union ULONG InputPinId;
{ ULONG OutputPinId;
ULONG Reserved;
} KSM_PIN_PAIR, * PKSM_PIN_PAIR;
typedef struct _KSM_PIN {
KSMETHOD Method;
__GNU_EXTENSION union {
ULONG PinId; ULONG PinId;
ULONG PinType; ULONG PinType;
}; };
@ -49,113 +60,146 @@ typedef struct _KSM_PIN
/* Functions */ /* Functions */
STDMETHODIMP_(NTSTATUS) BdaCheckChanges(IN PIRP Irp); STDMETHODIMP_(NTSTATUS)
STDMETHODIMP_(NTSTATUS) BdaCommitChanges(IN PIRP Irp); BdaCheckChanges(
IN PIRP Irp);
STDMETHODIMP_(NTSTATUS) BdaCreateFilterFactory( STDMETHODIMP_(NTSTATUS)
BdaCommitChanges(
IN PIRP Irp);
STDMETHODIMP_(NTSTATUS)
BdaCreateFilterFactory(
IN PKSDEVICE pKSDevice, IN PKSDEVICE pKSDevice,
IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, IN const KSFILTER_DESCRIPTOR *pFilterDescriptor,
IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate); IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate);
STDMETHODIMP_(NTSTATUS) BdaCreateFilterFactoryEx( STDMETHODIMP_(NTSTATUS)
BdaCreateFilterFactoryEx(
IN PKSDEVICE pKSDevice, IN PKSDEVICE pKSDevice,
IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, IN const KSFILTER_DESCRIPTOR *pFilterDescriptor,
IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate, IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate,
OUT PKSFILTERFACTORY *ppKSFilterFactory); OUT PKSFILTERFACTORY *ppKSFilterFactory);
STDMETHODIMP_(NTSTATUS) BdaCreatePin( STDMETHODIMP_(NTSTATUS)
BdaCreatePin(
IN PKSFILTER pKSFilter, IN PKSFILTER pKSFilter,
IN ULONG ulPinType, IN ULONG ulPinType,
OUT ULONG *pulPinId); OUT ULONG *pulPinId);
STDMETHODIMP_(NTSTATUS) BdaCreateTopology( STDMETHODIMP_(NTSTATUS)
BdaCreateTopology(
IN PKSFILTER pKSFilter, IN PKSFILTER pKSFilter,
IN ULONG InputPinId, IN ULONG InputPinId,
IN ULONG OutputPinId); IN ULONG OutputPinId);
STDMETHODIMP_(NTSTATUS) BdaDeletePin( STDMETHODIMP_(NTSTATUS)
BdaDeletePin(
IN PKSFILTER pKSFilter, IN PKSFILTER pKSFilter,
IN ULONG *pulPinId); IN ULONG *pulPinId);
STDMETHODIMP_(NTSTATUS) BdaFilterFactoryUpdateCacheData( STDMETHODIMP_(NTSTATUS)
BdaFilterFactoryUpdateCacheData(
IN PKSFILTERFACTORY pFilterFactory, IN PKSFILTERFACTORY pFilterFactory,
IN const KSFILTER_DESCRIPTOR *pFilterDescriptor OPTIONAL); IN const KSFILTER_DESCRIPTOR *pFilterDescriptor OPTIONAL);
STDMETHODIMP_(NTSTATUS) BdaGetChangeState( STDMETHODIMP_(NTSTATUS)
BdaGetChangeState(
IN PIRP Irp, IN PIRP Irp,
OUT BDA_CHANGE_STATE *pChangeState); OUT BDA_CHANGE_STATE *pChangeState);
STDMETHODIMP_(NTSTATUS) BdaInitFilter( STDMETHODIMP_(NTSTATUS)
BdaInitFilter(
IN PKSFILTER pKSFilter, IN PKSFILTER pKSFilter,
IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate); IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate);
STDMETHODIMP_(NTSTATUS) BdaMethodCreatePin( STDMETHODIMP_(NTSTATUS)
BdaMethodCreatePin(
IN PIRP Irp, IN PIRP Irp,
IN KSMETHOD *pKSMethod, IN KSMETHOD *pKSMethod,
OUT ULONG *pulPinFactoryID); OUT ULONG *pulPinFactoryID);
STDMETHODIMP_(NTSTATUS) BdaMethodCreateTopology( STDMETHODIMP_(NTSTATUS)
BdaMethodCreateTopology(
IN PIRP Irp, IN PIRP Irp,
IN KSMETHOD *pKSMethod, IN KSMETHOD *pKSMethod,
OPTIONAL PVOID pvIgnored); OPTIONAL PVOID pvIgnored);
STDMETHODIMP_(NTSTATUS) BdaMethodDeletePin( STDMETHODIMP_(NTSTATUS)
BdaMethodDeletePin(
IN PIRP Irp, IN PIRP Irp,
IN KSMETHOD *pKSMethod, IN KSMETHOD *pKSMethod,
OPTIONAL PVOID pvIgnored); OPTIONAL PVOID pvIgnored);
STDMETHODIMP_(NTSTATUS) BdaPropertyGetControllingPinId( STDMETHODIMP_(NTSTATUS)
BdaPropertyGetControllingPinId(
IN PIRP Irp, IN PIRP Irp,
IN KSP_BDA_NODE_PIN *pProperty, IN KSP_BDA_NODE_PIN *pProperty,
OUT ULONG *pulControllingPinId); OUT ULONG *pulControllingPinId);
STDMETHODIMP_(NTSTATUS) BdaPropertyGetPinControl( STDMETHODIMP_(NTSTATUS)
BdaPropertyGetPinControl(
IN PIRP Irp, IN PIRP Irp,
IN KSPROPERTY *pKSProperty, IN KSPROPERTY *pKSProperty,
OUT ULONG *pulProperty); OUT ULONG *pulProperty);
STDMETHODIMP_(NTSTATUS) BdaPropertyNodeDescriptors( STDMETHODIMP_(NTSTATUS)
BdaPropertyNodeDescriptors(
IN PIRP Irp, IN PIRP Irp,
IN KSPROPERTY *pKSProperty, IN KSPROPERTY *pKSProperty,
OUT BDANODE_DESCRIPTOR *pNodeDescriptorProperty); OUT BDANODE_DESCRIPTOR *pNodeDescriptorProperty);
STDMETHODIMP_(NTSTATUS) BdaPropertyNodeEvents( STDMETHODIMP_(NTSTATUS)
BdaPropertyNodeEvents(
IN PIRP Irp, IN PIRP Irp,
IN KSP_NODE *pKSProperty, IN KSP_NODE *pKSProperty,
OUT GUID *pguidProperty); OUT GUID *pguidProperty);
STDMETHODIMP_(NTSTATUS) BdaPropertyNodeMethods( STDMETHODIMP_(NTSTATUS)
BdaPropertyNodeMethods(
IN PIRP Irp, IN PIRP Irp,
IN KSP_NODE *pKSProperty, IN KSP_NODE *pKSProperty,
OUT GUID *pguidProperty); OUT GUID *pguidProperty);
STDMETHODIMP_(NTSTATUS) BdaPropertyNodeProperties( STDMETHODIMP_(NTSTATUS)
BdaPropertyNodeProperties(
IN PIRP Irp, IN PIRP Irp,
IN KSP_NODE *pKSProperty, IN KSP_NODE *pKSProperty,
OUT GUID *pguidProperty); OUT GUID *pguidProperty);
STDMETHODIMP_(NTSTATUS) BdaPropertyNodeTypes( STDMETHODIMP_(NTSTATUS)
BdaPropertyNodeTypes(
IN PIRP Irp, IN PIRP Irp,
IN KSPROPERTY *pKSProperty, IN KSPROPERTY *pKSProperty,
OUT ULONG *pulProperty); OUT ULONG *pulProperty);
STDMETHODIMP_(NTSTATUS) BdaPropertyPinTypes( STDMETHODIMP_(NTSTATUS)
BdaPropertyPinTypes(
IN PIRP Irp, IN PIRP Irp,
IN KSPROPERTY *pKSProperty, IN KSPROPERTY *pKSProperty,
OUT ULONG *pulProperty); OUT ULONG *pulProperty);
STDMETHODIMP_(NTSTATUS) BdaPropertyTemplateConnections( STDMETHODIMP_(NTSTATUS)
BdaPropertyTemplateConnections(
IN PIRP Irp, IN PIRP Irp,
IN KSPROPERTY *pKSProperty, IN KSPROPERTY *pKSProperty,
OUT KSTOPOLOGY_CONNECTION *pConnectionProperty); OUT KSTOPOLOGY_CONNECTION *pConnectionProperty);
STDMETHODIMP_(NTSTATUS) BdaStartChanges(IN PIRP Irp); STDMETHODIMP_(NTSTATUS)
STDMETHODIMP_(NTSTATUS) BdaUninitFilter(IN PKSFILTER pKSFilter); BdaStartChanges(
IN PIRP Irp);
STDMETHODIMP_(NTSTATUS) BdaValidateNodeProperty( STDMETHODIMP_(NTSTATUS)
BdaUninitFilter(
IN PKSFILTER pKSFilter);
STDMETHODIMP_(NTSTATUS)
BdaValidateNodeProperty(
IN PIRP Irp, IN PIRP Irp,
IN KSPROPERTY *pKSProperty); IN KSPROPERTY *pKSProperty);
#if defined(__cplusplus) #if defined(__cplusplus)
} }
#endif #endif
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */

View file

@ -229,9 +229,11 @@ typedef struct _IO_CSQ_IRP_CONTEXT {
} }
* *
*/ */
#ifndef IO_TYPE_CSQ_EX
typedef NTSTATUS (NTAPI *PIO_CSQ_INSERT_IRP_EX) (struct _IO_CSQ *Csq, typedef NTSTATUS (NTAPI *PIO_CSQ_INSERT_IRP_EX) (struct _IO_CSQ *Csq,
PIRP Irp, PIRP Irp,
PVOID InsertContext); PVOID InsertContext);
#endif
/* /*
* CANCEL-SAFE QUEUE DDIs * CANCEL-SAFE QUEUE DDIs

View file

@ -98,11 +98,11 @@ enum DeviceObjectState {
DeviceObjectRemoved DeviceObjectRemoved
}; };
typedef VOID (DDKAPI *PHID_STATUS_CHANGE)( typedef VOID (NTAPI *PHID_STATUS_CHANGE)(
PVOID Context, PVOID Context,
enum DeviceObjectState State); enum DeviceObjectState State);
typedef NTSTATUS (DDKAPI *PHIDP_GETCAPS)( typedef NTSTATUS (NTAPI *PHIDP_GETCAPS)(
IN PHIDP_PREPARSED_DATA PreparsedData, IN PHIDP_PREPARSED_DATA PreparsedData,
OUT PHIDP_CAPS Capabilities); OUT PHIDP_CAPS Capabilities);

View file

@ -69,7 +69,7 @@ typedef struct _HIDP_KEYBOARD_MODIFIER_STATE {
} DUMMYUNIONNAME; } DUMMYUNIONNAME;
} HIDP_KEYBOARD_MODIFIER_STATE, *PHIDP_KEYBOARD_MODIFIER_STATE; } HIDP_KEYBOARD_MODIFIER_STATE, *PHIDP_KEYBOARD_MODIFIER_STATE;
typedef BOOLEAN (DDKAPI *PHIDP_INSERT_SCANCODES)( typedef BOOLEAN (NTAPI *PHIDP_INSERT_SCANCODES)(
IN PVOID Context, IN PVOID Context,
IN PCHAR NewScanCodes, IN PCHAR NewScanCodes,
IN ULONG Length); IN ULONG Length);
@ -94,7 +94,7 @@ typedef struct _HIDD_CONFIGURATION {
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_TranslateUsageAndPagesToI8042ScanCodes( HidP_TranslateUsageAndPagesToI8042ScanCodes(
IN PUSAGE_AND_PAGE ChangedUsageList, IN PUSAGE_AND_PAGE ChangedUsageList,
IN ULONG UsageListLength, IN ULONG UsageListLength,
@ -105,7 +105,7 @@ HidP_TranslateUsageAndPagesToI8042ScanCodes(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_TranslateUsagesToI8042ScanCodes( HidP_TranslateUsagesToI8042ScanCodes(
IN PUSAGE ChangedUsageList, IN PUSAGE ChangedUsageList,
IN ULONG UsageListLength, IN ULONG UsageListLength,
@ -313,14 +313,14 @@ typedef enum _HIDP_REPORT_TYPE {
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetCaps( HidP_GetCaps(
IN PHIDP_PREPARSED_DATA PreparsedData, IN PHIDP_PREPARSED_DATA PreparsedData,
OUT PHIDP_CAPS Capabilities); OUT PHIDP_CAPS Capabilities);
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetData( HidP_GetData(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
OUT PHIDP_DATA DataList, OUT PHIDP_DATA DataList,
@ -331,7 +331,7 @@ HidP_GetData(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetExtendedAttributes( HidP_GetExtendedAttributes(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USHORT DataIndex, IN USHORT DataIndex,
@ -341,7 +341,7 @@ HidP_GetExtendedAttributes(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetLinkCollectionNodes( HidP_GetLinkCollectionNodes(
OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes, OUT PHIDP_LINK_COLLECTION_NODE LinkCollectionNodes,
IN OUT PULONG LinkCollectionNodesLength, IN OUT PULONG LinkCollectionNodesLength,
@ -349,7 +349,7 @@ HidP_GetLinkCollectionNodes(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetScaledUsageValue( HidP_GetScaledUsageValue(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -362,7 +362,7 @@ HidP_GetScaledUsageValue(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetSpecificButtonCaps( HidP_GetSpecificButtonCaps(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -374,7 +374,7 @@ HidP_GetSpecificButtonCaps(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetSpecificValueCaps( HidP_GetSpecificValueCaps(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -386,7 +386,7 @@ HidP_GetSpecificValueCaps(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetUsages( HidP_GetUsages(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -399,7 +399,7 @@ HidP_GetUsages(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetUsagesEx( HidP_GetUsagesEx(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USHORT LinkCollection, IN USHORT LinkCollection,
@ -411,7 +411,7 @@ HidP_GetUsagesEx(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetUsageValue( HidP_GetUsageValue(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -424,7 +424,7 @@ HidP_GetUsageValue(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_GetUsageValueArray( HidP_GetUsageValueArray(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -453,7 +453,7 @@ HidP_GetUsageValueArray(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_InitializeReportForID( HidP_InitializeReportForID(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN UCHAR ReportID, IN UCHAR ReportID,
@ -475,14 +475,14 @@ HidP_InitializeReportForID(
HIDAPI HIDAPI
ULONG ULONG
DDKAPI NTAPI
HidP_MaxDataListLength( HidP_MaxDataListLength(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN PHIDP_PREPARSED_DATA PreparsedData); IN PHIDP_PREPARSED_DATA PreparsedData);
HIDAPI HIDAPI
ULONG ULONG
DDKAPI NTAPI
HidP_MaxUsageListLength( HidP_MaxUsageListLength(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage OPTIONAL, IN USAGE UsagePage OPTIONAL,
@ -509,7 +509,7 @@ HidP_MaxUsageListLength(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_SetData( HidP_SetData(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN PHIDP_DATA DataList, IN PHIDP_DATA DataList,
@ -520,7 +520,7 @@ HidP_SetData(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_SetScaledUsageValue( HidP_SetScaledUsageValue(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -533,7 +533,7 @@ HidP_SetScaledUsageValue(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_SetUsages( HidP_SetUsages(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -546,7 +546,7 @@ HidP_SetUsages(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_SetUsageValue( HidP_SetUsageValue(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -559,7 +559,7 @@ HidP_SetUsageValue(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_SetUsageValueArray( HidP_SetUsageValueArray(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -592,7 +592,7 @@ HidP_SetUsageValueArray(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_UnsetUsages( HidP_UnsetUsages(
IN HIDP_REPORT_TYPE ReportType, IN HIDP_REPORT_TYPE ReportType,
IN USAGE UsagePage, IN USAGE UsagePage,
@ -605,7 +605,7 @@ HidP_UnsetUsages(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_UsageAndPageListDifference( HidP_UsageAndPageListDifference(
IN PUSAGE_AND_PAGE PreviousUsageList, IN PUSAGE_AND_PAGE PreviousUsageList,
IN PUSAGE_AND_PAGE CurrentUsageList, IN PUSAGE_AND_PAGE CurrentUsageList,
@ -615,7 +615,7 @@ HidP_UsageAndPageListDifference(
HIDAPI HIDAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
HidP_UsageListDifference( HidP_UsageListDifference(
IN PUSAGE PreviousUsageList, IN PUSAGE PreviousUsageList,
IN PUSAGE CurrentUsageList, IN PUSAGE CurrentUsageList,

View file

@ -51,7 +51,7 @@ extern "C" {
CHANGERAPI CHANGERAPI
PVOID PVOID
DDKAPI NTAPI
ChangerClassAllocatePool( ChangerClassAllocatePool(
IN POOL_TYPE PoolType, IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes); IN ULONG NumberOfBytes);
@ -64,13 +64,13 @@ ChangerClassDebugPrint(
CHANGERAPI CHANGERAPI
PVOID PVOID
DDKAPI NTAPI
ChangerClassFreePool( ChangerClassFreePool(
IN PVOID PoolToFree); IN PVOID PoolToFree);
CHANGERAPI CHANGERAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
ChangerClassSendSrbSynchronous( ChangerClassSendSrbSynchronous(
IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT DeviceObject,
IN PSCSI_REQUEST_BLOCK Srb, IN PSCSI_REQUEST_BLOCK Srb,
@ -79,27 +79,27 @@ ChangerClassSendSrbSynchronous(
IN BOOLEAN WriteToDevice); IN BOOLEAN WriteToDevice);
typedef NTSTATUS DDKAPI typedef NTSTATUS NTAPI
(*CHANGER_INITIALIZE)( (*CHANGER_INITIALIZE)(
IN PDEVICE_OBJECT DeviceObject); IN PDEVICE_OBJECT DeviceObject);
typedef ULONG DDKAPI typedef ULONG NTAPI
(*CHANGER_EXTENSION_SIZE)( (*CHANGER_EXTENSION_SIZE)(
VOID); VOID);
typedef VOID DDKAPI typedef VOID NTAPI
(*CHANGER_ERROR_ROUTINE)( (*CHANGER_ERROR_ROUTINE)(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PSCSI_REQUEST_BLOCK Srb, PSCSI_REQUEST_BLOCK Srb,
NTSTATUS *Status, NTSTATUS *Status,
BOOLEAN *Retry); BOOLEAN *Retry);
typedef NTSTATUS DDKAPI typedef NTSTATUS NTAPI
(*CHANGER_COMMAND_ROUTINE)( (*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp); IN PIRP Irp);
typedef NTSTATUS DDKAPI typedef NTSTATUS NTAPI
(*CHANGER_PERFORM_DIAGNOSTICS)( (*CHANGER_PERFORM_DIAGNOSTICS)(
IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT DeviceObject,
OUT PWMI_CHANGER_PROBLEM_DEVICE_ERROR ChangerDeviceError); OUT PWMI_CHANGER_PROBLEM_DEVICE_ERROR ChangerDeviceError);
@ -125,7 +125,7 @@ typedef struct _MCD_INIT_DATA {
CHANGERAPI CHANGERAPI
NTSTATUS NTSTATUS
DDKAPI NTAPI
ChangerClassInitialize( ChangerClassInitialize(
IN PDRIVER_OBJECT DriverObject, IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath, IN PUNICODE_STRING RegistryPath,

Some files were not shown because too many files have changed in this diff Show more