ntoskrnl: Build with msvcrt.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
921e0457c5
commit
a1cdcc5290
|
@ -3,6 +3,8 @@ IMPORTLIB = ntoskrnl
|
||||||
IMPORTS = advapi32 hal
|
IMPORTS = advapi32 hal
|
||||||
DELAYIMPORTS = setupapi user32
|
DELAYIMPORTS = setupapi user32
|
||||||
|
|
||||||
|
EXTRADLLFLAGS = -mno-cygwin
|
||||||
|
|
||||||
C_SRCS = \
|
C_SRCS = \
|
||||||
instr.c \
|
instr.c \
|
||||||
ntoskrnl.c \
|
ntoskrnl.c \
|
||||||
|
|
|
@ -21,9 +21,6 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "wine/port.h"
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#define NONAMELESSUNION
|
#define NONAMELESSUNION
|
||||||
|
|
|
@ -21,9 +21,6 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "wine/port.h"
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
@ -44,7 +41,6 @@
|
||||||
#include "ddk/ntddk.h"
|
#include "ddk/ntddk.h"
|
||||||
#include "ddk/ntifs.h"
|
#include "ddk/ntifs.h"
|
||||||
#include "ddk/wdm.h"
|
#include "ddk/wdm.h"
|
||||||
#include "wine/unicode.h"
|
|
||||||
#include "wine/server.h"
|
#include "wine/server.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "wine/heap.h"
|
#include "wine/heap.h"
|
||||||
|
@ -301,7 +297,7 @@ NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret
|
||||||
for (i = 0; i < ARRAY_SIZE(known_types); i++)
|
for (i = 0; i < ARRAY_SIZE(known_types); i++)
|
||||||
{
|
{
|
||||||
type = *known_types[i];
|
type = *known_types[i];
|
||||||
if (!RtlCompareUnicodeStrings( type->name, strlenW(type->name), type_info->TypeName.Buffer,
|
if (!RtlCompareUnicodeStrings( type->name, lstrlenW(type->name), type_info->TypeName.Buffer,
|
||||||
type_info->TypeName.Length / sizeof(WCHAR), FALSE ))
|
type_info->TypeName.Length / sizeof(WCHAR), FALSE ))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -312,7 +308,7 @@ NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret
|
||||||
return STATUS_INVALID_HANDLE;
|
return STATUS_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (RtlCompareUnicodeStrings( type->name, strlenW(type->name), type_info->TypeName.Buffer,
|
else if (RtlCompareUnicodeStrings( type->name, lstrlenW(type->name), type_info->TypeName.Buffer,
|
||||||
type_info->TypeName.Length / sizeof(WCHAR), FALSE) )
|
type_info->TypeName.Length / sizeof(WCHAR), FALSE) )
|
||||||
{
|
{
|
||||||
LeaveCriticalSection( &handle_map_cs );
|
LeaveCriticalSection( &handle_map_cs );
|
||||||
|
@ -1337,18 +1333,18 @@ static void build_driver_keypath( const WCHAR *name, UNICODE_STRING *keypath )
|
||||||
WCHAR *str;
|
WCHAR *str;
|
||||||
|
|
||||||
/* Check what prefix is present */
|
/* Check what prefix is present */
|
||||||
if (strncmpW( name, servicesW, strlenW(servicesW) ) == 0)
|
if (wcsncmp( name, servicesW, lstrlenW(servicesW) ) == 0)
|
||||||
{
|
{
|
||||||
FIXME( "Driver name %s is malformed as the keypath\n", debugstr_w(name) );
|
FIXME( "Driver name %s is malformed as the keypath\n", debugstr_w(name) );
|
||||||
RtlCreateUnicodeString( keypath, name );
|
RtlCreateUnicodeString( keypath, name );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (strncmpW( name, driverW, strlenW(driverW) ) == 0)
|
if (wcsncmp( name, driverW, lstrlenW(driverW) ) == 0)
|
||||||
name += strlenW(driverW);
|
name += lstrlenW(driverW);
|
||||||
else
|
else
|
||||||
FIXME( "Driver name %s does not properly begin with \\Driver\\\n", debugstr_w(name) );
|
FIXME( "Driver name %s does not properly begin with \\Driver\\\n", debugstr_w(name) );
|
||||||
|
|
||||||
str = HeapAlloc( GetProcessHeap(), 0, sizeof(servicesW) + strlenW(name)*sizeof(WCHAR));
|
str = HeapAlloc( GetProcessHeap(), 0, sizeof(servicesW) + lstrlenW(name)*sizeof(WCHAR));
|
||||||
lstrcpyW( str, servicesW );
|
lstrcpyW( str, servicesW );
|
||||||
lstrcatW( str, name );
|
lstrcatW( str, name );
|
||||||
RtlInitUnicodeString( keypath, str );
|
RtlInitUnicodeString( keypath, str );
|
||||||
|
@ -1488,13 +1484,13 @@ NTSTATUS WINAPI IoCreateDevice( DRIVER_OBJECT *driver, ULONG ext_size,
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
sprintfW( autoW, auto_format, auto_idx++ );
|
swprintf( autoW, ARRAY_SIZE(autoW), auto_format, auto_idx++ );
|
||||||
SERVER_START_REQ( create_device )
|
SERVER_START_REQ( create_device )
|
||||||
{
|
{
|
||||||
req->rootdir = 0;
|
req->rootdir = 0;
|
||||||
req->manager = wine_server_obj_handle( manager );
|
req->manager = wine_server_obj_handle( manager );
|
||||||
req->user_ptr = wine_server_client_ptr( device );
|
req->user_ptr = wine_server_client_ptr( device );
|
||||||
wine_server_add_data( req, autoW, strlenW(autoW) * sizeof(WCHAR) );
|
wine_server_add_data( req, autoW, lstrlenW(autoW) * sizeof(WCHAR) );
|
||||||
status = wine_server_call( req );
|
status = wine_server_call( req );
|
||||||
}
|
}
|
||||||
SERVER_END_REQ;
|
SERVER_END_REQ;
|
||||||
|
@ -2793,7 +2789,7 @@ BOOLEAN WINAPI PsGetVersion(ULONG *major, ULONG *minor, ULONG *build, UNICODE_ST
|
||||||
if (version)
|
if (version)
|
||||||
{
|
{
|
||||||
#if 0 /* FIXME: GameGuard passes an uninitialized pointer in version->Buffer */
|
#if 0 /* FIXME: GameGuard passes an uninitialized pointer in version->Buffer */
|
||||||
size_t len = min( strlenW(info.szCSDVersion)*sizeof(WCHAR), version->MaximumLength );
|
size_t len = min( lstrlenW(info.szCSDVersion)*sizeof(WCHAR), version->MaximumLength );
|
||||||
memcpy( version->Buffer, info.szCSDVersion, len );
|
memcpy( version->Buffer, info.szCSDVersion, len );
|
||||||
if (len < version->MaximumLength) version->Buffer[len / sizeof(WCHAR)] = 0;
|
if (len < version->MaximumLength) version->Buffer[len / sizeof(WCHAR)] = 0;
|
||||||
version->Length = len;
|
version->Length = len;
|
||||||
|
@ -3220,7 +3216,7 @@ static NTSTATUS open_driver( const UNICODE_STRING *service_name, SC_HANDLE *serv
|
||||||
memcpy( name, service_name->Buffer, service_name->Length );
|
memcpy( name, service_name->Buffer, service_name->Length );
|
||||||
name[ service_name->Length / sizeof(WCHAR) ] = 0;
|
name[ service_name->Length / sizeof(WCHAR) ] = 0;
|
||||||
|
|
||||||
if (strncmpW( name, servicesW, strlenW(servicesW) ))
|
if (wcsncmp( name, servicesW, lstrlenW(servicesW) ))
|
||||||
{
|
{
|
||||||
FIXME( "service name %s is not a keypath\n", debugstr_us(service_name) );
|
FIXME( "service name %s is not a keypath\n", debugstr_us(service_name) );
|
||||||
RtlFreeHeap( GetProcessHeap(), 0, name );
|
RtlFreeHeap( GetProcessHeap(), 0, name );
|
||||||
|
@ -3234,7 +3230,7 @@ static NTSTATUS open_driver( const UNICODE_STRING *service_name, SC_HANDLE *serv
|
||||||
return STATUS_NOT_SUPPORTED;
|
return STATUS_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
*service = OpenServiceW( manager_handle, name + strlenW(servicesW),
|
*service = OpenServiceW( manager_handle, name + lstrlenW(servicesW),
|
||||||
SERVICE_QUERY_CONFIG | SERVICE_SET_STATUS );
|
SERVICE_QUERY_CONFIG | SERVICE_SET_STATUS );
|
||||||
RtlFreeHeap( GetProcessHeap(), 0, name );
|
RtlFreeHeap( GetProcessHeap(), 0, name );
|
||||||
CloseServiceHandle( manager_handle );
|
CloseServiceHandle( manager_handle );
|
||||||
|
@ -3467,20 +3463,20 @@ static HMODULE load_driver( const WCHAR *driver_name, const UNICODE_STRING *keyn
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strncmpiW( path, systemrootW, 12 ))
|
if (!wcsnicmp( path, systemrootW, 12 ))
|
||||||
{
|
{
|
||||||
WCHAR buffer[MAX_PATH];
|
WCHAR buffer[MAX_PATH];
|
||||||
|
|
||||||
GetWindowsDirectoryW(buffer, MAX_PATH);
|
GetWindowsDirectoryW(buffer, MAX_PATH);
|
||||||
|
|
||||||
str = HeapAlloc(GetProcessHeap(), 0, (size -11 + strlenW(buffer))
|
str = HeapAlloc(GetProcessHeap(), 0, (size -11 + lstrlenW(buffer))
|
||||||
* sizeof(WCHAR));
|
* sizeof(WCHAR));
|
||||||
lstrcpyW(str, buffer);
|
lstrcpyW(str, buffer);
|
||||||
lstrcatW(str, path + 11);
|
lstrcatW(str, path + 11);
|
||||||
HeapFree( GetProcessHeap(), 0, path );
|
HeapFree( GetProcessHeap(), 0, path );
|
||||||
path = str;
|
path = str;
|
||||||
}
|
}
|
||||||
else if (!strncmpW( path, ntprefixW, 4 ))
|
else if (!wcsncmp( path, ntprefixW, 4 ))
|
||||||
str = path + 4;
|
str = path + 4;
|
||||||
else
|
else
|
||||||
str = path;
|
str = path;
|
||||||
|
@ -3491,7 +3487,7 @@ static HMODULE load_driver( const WCHAR *driver_name, const UNICODE_STRING *keyn
|
||||||
WCHAR buffer[MAX_PATH];
|
WCHAR buffer[MAX_PATH];
|
||||||
GetSystemDirectoryW(buffer, MAX_PATH);
|
GetSystemDirectoryW(buffer, MAX_PATH);
|
||||||
path = HeapAlloc(GetProcessHeap(),0,
|
path = HeapAlloc(GetProcessHeap(),0,
|
||||||
(strlenW(buffer) + strlenW(driversW) + strlenW(driver_name) + strlenW(postfixW) + 1)
|
(lstrlenW(buffer) + lstrlenW(driversW) + lstrlenW(driver_name) + lstrlenW(postfixW) + 1)
|
||||||
*sizeof(WCHAR));
|
*sizeof(WCHAR));
|
||||||
lstrcpyW(path, buffer);
|
lstrcpyW(path, buffer);
|
||||||
lstrcatW(path, driversW);
|
lstrcatW(path, driversW);
|
||||||
|
@ -3518,7 +3514,7 @@ static NTSTATUS WINAPI init_driver( DRIVER_OBJECT *driver_object, UNICODE_STRING
|
||||||
HMODULE module;
|
HMODULE module;
|
||||||
|
|
||||||
/* Retrieve driver name from the keyname */
|
/* Retrieve driver name from the keyname */
|
||||||
driver_name = strrchrW( keyname->Buffer, '\\' );
|
driver_name = wcsrchr( keyname->Buffer, '\\' );
|
||||||
driver_name++;
|
driver_name++;
|
||||||
|
|
||||||
module = load_driver( driver_name, keyname );
|
module = load_driver( driver_name, keyname );
|
||||||
|
@ -3554,12 +3550,12 @@ static BOOLEAN get_drv_name( UNICODE_STRING *drv_name, const UNICODE_STRING *ser
|
||||||
static const WCHAR driverW[] = {'\\','D','r','i','v','e','r','\\',0};
|
static const WCHAR driverW[] = {'\\','D','r','i','v','e','r','\\',0};
|
||||||
WCHAR *str;
|
WCHAR *str;
|
||||||
|
|
||||||
if (!(str = heap_alloc( sizeof(driverW) + service_name->Length - strlenW(servicesW)*sizeof(WCHAR) )))
|
if (!(str = heap_alloc( sizeof(driverW) + service_name->Length - lstrlenW(servicesW)*sizeof(WCHAR) )))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
lstrcpyW( str, driverW );
|
lstrcpyW( str, driverW );
|
||||||
lstrcpynW( str + strlenW(driverW), service_name->Buffer + strlenW(servicesW),
|
lstrcpynW( str + lstrlenW(driverW), service_name->Buffer + lstrlenW(servicesW),
|
||||||
service_name->Length/sizeof(WCHAR) - strlenW(servicesW) + 1 );
|
service_name->Length/sizeof(WCHAR) - lstrlenW(servicesW) + 1 );
|
||||||
RtlInitUnicodeString( drv_name, str );
|
RtlInitUnicodeString( drv_name, str );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -3666,58 +3662,6 @@ PKEVENT WINAPI IoCreateNotificationEvent(UNICODE_STRING *name, HANDLE *handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* memcpy (NTOSKRNL.@)
|
|
||||||
*
|
|
||||||
* NOTES
|
|
||||||
* Behaves like memmove.
|
|
||||||
*/
|
|
||||||
void * __cdecl NTOSKRNL_memcpy( void *dst, const void *src, size_t n )
|
|
||||||
{
|
|
||||||
return memmove( dst, src, n );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* memset (NTOSKRNL.@)
|
|
||||||
*/
|
|
||||||
void * __cdecl NTOSKRNL_memset( void *dst, int c, size_t n )
|
|
||||||
{
|
|
||||||
return memset( dst, c, n );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* _stricmp (NTOSKRNL.@)
|
|
||||||
*/
|
|
||||||
int __cdecl NTOSKRNL__stricmp( LPCSTR str1, LPCSTR str2 )
|
|
||||||
{
|
|
||||||
return _strnicmp( str1, str2, -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* _strnicmp (NTOSKRNL.@)
|
|
||||||
*/
|
|
||||||
int __cdecl NTOSKRNL__strnicmp( LPCSTR str1, LPCSTR str2, size_t n )
|
|
||||||
{
|
|
||||||
return _strnicmp( str1, str2, n );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* _wcsnicmp (NTOSKRNL.@)
|
|
||||||
*/
|
|
||||||
INT __cdecl NTOSKRNL__wcsnicmp( LPCWSTR str1, LPCWSTR str2, INT n )
|
|
||||||
{
|
|
||||||
return strncmpiW( str1, str2, n );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* wcsncmp (NTOSKRNL.@)
|
|
||||||
*/
|
|
||||||
INT __cdecl NTOSKRNL_wcsncmp( LPCWSTR str1, LPCWSTR str2, INT n )
|
|
||||||
{
|
|
||||||
return strncmpW( str1, str2, n );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* __chkstk (NTOSKRNL.@)
|
* __chkstk (NTOSKRNL.@)
|
||||||
|
|
|
@ -1422,10 +1422,10 @@
|
||||||
@ stdcall -private ZwYieldExecution() NtYieldExecution
|
@ stdcall -private ZwYieldExecution() NtYieldExecution
|
||||||
@ stdcall -arch=x86_64 __C_specific_handler(ptr long ptr ptr)
|
@ stdcall -arch=x86_64 __C_specific_handler(ptr long ptr ptr)
|
||||||
@ stdcall -private -arch=arm,x86_64 -norelay __chkstk()
|
@ stdcall -private -arch=arm,x86_64 -norelay __chkstk()
|
||||||
@ cdecl -private -arch=i386 _CIcos() msvcrt._CIcos
|
@ cdecl -private -arch=i386 _CIcos()
|
||||||
@ cdecl -private -arch=i386 _CIsin() msvcrt._CIsin
|
@ cdecl -private -arch=i386 _CIsin()
|
||||||
@ cdecl -private -arch=i386 _CIsqrt() msvcrt._CIsqrt
|
@ cdecl -private -arch=i386 _CIsqrt()
|
||||||
@ cdecl -private _abnormal_termination() msvcrt._abnormal_termination
|
@ cdecl -private _abnormal_termination()
|
||||||
@ stdcall -arch=i386 -ret64 _alldiv(int64 int64)
|
@ stdcall -arch=i386 -ret64 _alldiv(int64 int64)
|
||||||
@ stdcall -arch=i386 -norelay _alldvrm(int64 int64)
|
@ stdcall -arch=i386 -norelay _alldvrm(int64 int64)
|
||||||
@ stdcall -arch=i386 -ret64 _allmul(int64 int64)
|
@ stdcall -arch=i386 -ret64 _allmul(int64 int64)
|
||||||
|
@ -1438,82 +1438,82 @@
|
||||||
@ stdcall -arch=i386 -ret64 _aullrem(int64 int64)
|
@ stdcall -arch=i386 -ret64 _aullrem(int64 int64)
|
||||||
@ stdcall -arch=i386 -ret64 _aullshr(int64 long)
|
@ stdcall -arch=i386 -ret64 _aullshr(int64 long)
|
||||||
@ stdcall -arch=i386 -norelay _chkstk()
|
@ stdcall -arch=i386 -norelay _chkstk()
|
||||||
@ cdecl -arch=i386 _except_handler2(ptr ptr ptr ptr) msvcrt._except_handler2
|
@ cdecl -arch=i386 _except_handler2(ptr ptr ptr ptr)
|
||||||
@ cdecl -arch=i386 _except_handler3(ptr ptr ptr ptr) msvcrt._except_handler3
|
@ cdecl -arch=i386 _except_handler3(ptr ptr ptr ptr)
|
||||||
@ cdecl -arch=i386 _global_unwind2(ptr) msvcrt._global_unwind2
|
@ cdecl -arch=i386 _global_unwind2(ptr)
|
||||||
@ cdecl _itoa(long ptr long) msvcrt._itoa
|
@ cdecl _itoa(long ptr long)
|
||||||
@ cdecl _itow(long ptr long) msvcrt._itow
|
@ cdecl _itow(long ptr long)
|
||||||
@ cdecl -arch=x86_64 _local_unwind(ptr ptr) msvcrt._local_unwind
|
@ cdecl -arch=x86_64 _local_unwind(ptr ptr)
|
||||||
@ cdecl -arch=i386 _local_unwind2(ptr long) msvcrt._local_unwind2
|
@ cdecl -arch=i386 _local_unwind2(ptr long)
|
||||||
@ cdecl _purecall() msvcrt._purecall
|
@ cdecl _purecall()
|
||||||
@ varargs _snprintf(ptr long str) msvcrt._snprintf
|
@ varargs _snprintf(ptr long str)
|
||||||
@ varargs _snwprintf(ptr long wstr) msvcrt._snwprintf
|
@ varargs _snwprintf(ptr long wstr)
|
||||||
@ cdecl _stricmp(str str) NTOSKRNL__stricmp
|
@ cdecl _stricmp(str str)
|
||||||
@ cdecl _strlwr(str) msvcrt._strlwr
|
@ cdecl _strlwr(str)
|
||||||
@ cdecl _strnicmp(str str long) NTOSKRNL__strnicmp
|
@ cdecl _strnicmp(str str long)
|
||||||
@ cdecl _strnset(str long long) msvcrt._strnset
|
@ cdecl _strnset(str long long)
|
||||||
@ cdecl _strrev(str) msvcrt._strrev
|
@ cdecl _strrev(str)
|
||||||
@ cdecl _strset(str long) msvcrt._strset
|
@ cdecl _strset(str long)
|
||||||
@ cdecl _strupr(str) msvcrt._strupr
|
@ cdecl _strupr(str)
|
||||||
@ cdecl _vsnprintf(ptr long str ptr) msvcrt._vsnprintf
|
@ cdecl _vsnprintf(ptr long str ptr)
|
||||||
@ cdecl _vsnwprintf(ptr long wstr ptr) msvcrt._vsnwprintf
|
@ cdecl _vsnwprintf(ptr long wstr ptr)
|
||||||
@ cdecl _wcsicmp(wstr wstr) msvcrt._wcsicmp
|
@ cdecl _wcsicmp(wstr wstr)
|
||||||
@ cdecl _wcslwr(wstr) msvcrt._wcslwr
|
@ cdecl _wcslwr(wstr)
|
||||||
@ cdecl _wcsnicmp(wstr wstr long) NTOSKRNL__wcsnicmp
|
@ cdecl _wcsnicmp(wstr wstr long)
|
||||||
@ cdecl _wcsnset(wstr long long) msvcrt._wcsnset
|
@ cdecl _wcsnset(wstr long long)
|
||||||
@ cdecl _wcsrev(wstr) msvcrt._wcsrev
|
@ cdecl _wcsrev(wstr)
|
||||||
@ cdecl _wcsupr(wstr) msvcrt._wcsupr
|
@ cdecl _wcsupr(wstr)
|
||||||
@ cdecl atoi(str) msvcrt.atoi
|
@ cdecl atoi(str)
|
||||||
@ cdecl atol(str) msvcrt.atol
|
@ cdecl atol(str)
|
||||||
@ cdecl isdigit(long) msvcrt.isdigit
|
@ cdecl isdigit(long)
|
||||||
@ cdecl islower(long) msvcrt.islower
|
@ cdecl islower(long)
|
||||||
@ cdecl isprint(long) msvcrt.isprint
|
@ cdecl isprint(long)
|
||||||
@ cdecl isspace(long) msvcrt.isspace
|
@ cdecl isspace(long)
|
||||||
@ cdecl isupper(long) msvcrt.isupper
|
@ cdecl isupper(long)
|
||||||
@ cdecl isxdigit(long) msvcrt.isxdigit
|
@ cdecl isxdigit(long)
|
||||||
@ cdecl mbstowcs(ptr str long) msvcrt.mbstowcs
|
@ cdecl mbstowcs(ptr str long)
|
||||||
@ cdecl mbtowc(ptr str long) msvcrt.mbtowc
|
@ cdecl mbtowc(ptr str long)
|
||||||
@ cdecl memchr(ptr long long) msvcrt.memchr
|
@ cdecl memchr(ptr long long)
|
||||||
@ cdecl memcpy(ptr ptr long) NTOSKRNL_memcpy
|
@ cdecl memcpy(ptr ptr long)
|
||||||
@ cdecl memmove(ptr ptr long) msvcrt.memmove
|
@ cdecl memmove(ptr ptr long)
|
||||||
@ cdecl memset(ptr long long) NTOSKRNL_memset
|
@ cdecl memset(ptr long long)
|
||||||
@ cdecl qsort(ptr long long ptr) msvcrt.qsort
|
@ cdecl qsort(ptr long long ptr)
|
||||||
@ cdecl rand() msvcrt.rand
|
@ cdecl rand()
|
||||||
@ varargs sprintf(ptr str) msvcrt.sprintf
|
@ varargs sprintf(ptr str)
|
||||||
@ cdecl srand(long) msvcrt.srand
|
@ cdecl srand(long)
|
||||||
@ cdecl strcat(str str) msvcrt.strcat
|
@ cdecl strcat(str str)
|
||||||
@ cdecl strchr(str long) msvcrt.strchr
|
@ cdecl strchr(str long)
|
||||||
@ cdecl strcmp(str str) msvcrt.strcmp
|
@ cdecl strcmp(str str)
|
||||||
@ cdecl strcpy(ptr str) msvcrt.strcpy
|
@ cdecl strcpy(ptr str)
|
||||||
@ cdecl strlen(str) msvcrt.strlen
|
@ cdecl strlen(str)
|
||||||
@ cdecl strncat(str str long) msvcrt.strncat
|
@ cdecl strncat(str str long)
|
||||||
@ cdecl strncmp(str str long) msvcrt.strncmp
|
@ cdecl strncmp(str str long)
|
||||||
@ cdecl strncpy(ptr str long) msvcrt.strncpy
|
@ cdecl strncpy(ptr str long)
|
||||||
@ cdecl strrchr(str long) msvcrt.strrchr
|
@ cdecl strrchr(str long)
|
||||||
@ cdecl strspn(str str) msvcrt.strspn
|
@ cdecl strspn(str str)
|
||||||
@ cdecl strstr(str str) msvcrt.strstr
|
@ cdecl strstr(str str)
|
||||||
@ varargs swprintf(ptr wstr) msvcrt.swprintf
|
@ varargs swprintf(ptr wstr)
|
||||||
@ cdecl tolower(long) msvcrt.tolower
|
@ cdecl tolower(long)
|
||||||
@ cdecl toupper(long) msvcrt.toupper
|
@ cdecl toupper(long)
|
||||||
@ cdecl towlower(long) msvcrt.towlower
|
@ cdecl towlower(long)
|
||||||
@ cdecl towupper(long) msvcrt.towupper
|
@ cdecl towupper(long)
|
||||||
@ stdcall vDbgPrintEx(long long str ptr)
|
@ stdcall vDbgPrintEx(long long str ptr)
|
||||||
@ stdcall vDbgPrintExWithPrefix(str long long str ptr)
|
@ stdcall vDbgPrintExWithPrefix(str long long str ptr)
|
||||||
@ cdecl vsprintf(ptr str ptr) msvcrt.vsprintf
|
@ cdecl vsprintf(ptr str ptr)
|
||||||
@ cdecl wcscat(wstr wstr) msvcrt.wcscat
|
@ cdecl wcscat(wstr wstr)
|
||||||
@ cdecl wcschr(wstr long) msvcrt.wcschr
|
@ cdecl wcschr(wstr long)
|
||||||
@ cdecl wcscmp(wstr wstr) msvcrt.wcscmp
|
@ cdecl wcscmp(wstr wstr)
|
||||||
@ cdecl wcscpy(ptr wstr) msvcrt.wcscpy
|
@ cdecl wcscpy(ptr wstr)
|
||||||
@ cdecl wcscspn(wstr wstr) msvcrt.wcscspn
|
@ cdecl wcscspn(wstr wstr)
|
||||||
@ cdecl wcslen(wstr) msvcrt.wcslen
|
@ cdecl wcslen(wstr)
|
||||||
@ cdecl wcsncat(wstr wstr long) msvcrt.wcsncat
|
@ cdecl wcsncat(wstr wstr long)
|
||||||
@ cdecl wcsncmp(wstr wstr long) NTOSKRNL_wcsncmp
|
@ cdecl wcsncmp(wstr wstr long)
|
||||||
@ cdecl wcsncpy(ptr wstr long) msvcrt.wcsncpy
|
@ cdecl wcsncpy(ptr wstr long)
|
||||||
@ cdecl wcsrchr(wstr long) msvcrt.wcsrchr
|
@ cdecl wcsrchr(wstr long)
|
||||||
@ cdecl wcsspn(wstr wstr) msvcrt.wcsspn
|
@ cdecl wcsspn(wstr wstr)
|
||||||
@ cdecl wcsstr(wstr wstr) msvcrt.wcsstr
|
@ cdecl wcsstr(wstr wstr)
|
||||||
@ cdecl wcstombs(ptr ptr long) msvcrt.wcstombs
|
@ cdecl wcstombs(ptr ptr long)
|
||||||
@ cdecl wctomb(ptr long) msvcrt.wctomb
|
@ cdecl wctomb(ptr long)
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# Wine internal extensions
|
# Wine internal extensions
|
||||||
|
|
|
@ -40,7 +40,6 @@
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "wine/heap.h"
|
#include "wine/heap.h"
|
||||||
#include "wine/rbtree.h"
|
#include "wine/rbtree.h"
|
||||||
#include "wine/unicode.h"
|
|
||||||
|
|
||||||
#include "ntoskrnl_private.h"
|
#include "ntoskrnl_private.h"
|
||||||
|
|
||||||
|
@ -223,7 +222,7 @@ static NTSTATUS get_device_instance_id( DEVICE_OBJECT *device, WCHAR *buffer )
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpyW( buffer, id );
|
lstrcpyW( buffer, id );
|
||||||
ExFreePool( id );
|
ExFreePool( id );
|
||||||
|
|
||||||
if ((status = get_device_id( device, BusQueryInstanceID, &id )))
|
if ((status = get_device_id( device, BusQueryInstanceID, &id )))
|
||||||
|
@ -232,8 +231,8 @@ static NTSTATUS get_device_instance_id( DEVICE_OBJECT *device, WCHAR *buffer )
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcatW( buffer, backslashW );
|
lstrcatW( buffer, backslashW );
|
||||||
strcatW( buffer, id );
|
lstrcatW( buffer, id );
|
||||||
ExFreePool( id );
|
ExFreePool( id );
|
||||||
|
|
||||||
TRACE("Returning ID %s.\n", debugstr_w(buffer));
|
TRACE("Returning ID %s.\n", debugstr_w(buffer));
|
||||||
|
@ -277,8 +276,8 @@ static void load_function_driver( DEVICE_OBJECT *device, HDEVINFO set, SP_DEVINF
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpyW( buffer, servicesW );
|
lstrcpyW( buffer, servicesW );
|
||||||
strcatW( buffer, driver );
|
lstrcatW( buffer, driver );
|
||||||
RtlInitUnicodeString( &string, buffer );
|
RtlInitUnicodeString( &string, buffer );
|
||||||
status = ZwLoadDriver( &string );
|
status = ZwLoadDriver( &string );
|
||||||
if (status != STATUS_SUCCESS && status != STATUS_IMAGE_ALREADY_LOADED)
|
if (status != STATUS_SUCCESS && status != STATUS_IMAGE_ALREADY_LOADED)
|
||||||
|
@ -287,8 +286,8 @@ static void load_function_driver( DEVICE_OBJECT *device, HDEVINFO set, SP_DEVINF
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpyW( buffer, driverW );
|
lstrcpyW( buffer, driverW );
|
||||||
strcatW( buffer, driver );
|
lstrcatW( buffer, driver );
|
||||||
RtlInitUnicodeString( &string, buffer );
|
RtlInitUnicodeString( &string, buffer );
|
||||||
if (ObReferenceObjectByName( &string, OBJ_CASE_INSENSITIVE, NULL,
|
if (ObReferenceObjectByName( &string, OBJ_CASE_INSENSITIVE, NULL,
|
||||||
0, NULL, KernelMode, NULL, (void **)&driver_obj ) != STATUS_SUCCESS)
|
0, NULL, KernelMode, NULL, (void **)&driver_obj ) != STATUS_SUCCESS)
|
||||||
|
@ -313,7 +312,7 @@ static void load_function_driver( DEVICE_OBJECT *device, HDEVINFO set, SP_DEVINF
|
||||||
static size_t sizeof_multiszW( const WCHAR *str )
|
static size_t sizeof_multiszW( const WCHAR *str )
|
||||||
{
|
{
|
||||||
const WCHAR *p;
|
const WCHAR *p;
|
||||||
for (p = str; *p; p += strlenW(p) + 1);
|
for (p = str; *p; p += lstrlenW(p) + 1);
|
||||||
return p + 1 - str;
|
return p + 1 - str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,11 +482,11 @@ NTSTATUS WINAPI IoGetDeviceProperty( DEVICE_OBJECT *device, DEVICE_REGISTRY_PROP
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
struprW( id );
|
wcsupr( id );
|
||||||
ptr = strchrW( id, '\\' );
|
ptr = wcschr( id, '\\' );
|
||||||
if (ptr) *ptr = 0;
|
if (ptr) *ptr = 0;
|
||||||
|
|
||||||
*needed = sizeof(WCHAR) * (strlenW(id) + 1);
|
*needed = sizeof(WCHAR) * (lstrlenW(id) + 1);
|
||||||
if (length >= *needed)
|
if (length >= *needed)
|
||||||
memcpy( buffer, id, *needed );
|
memcpy( buffer, id, *needed );
|
||||||
else
|
else
|
||||||
|
@ -604,26 +603,28 @@ NTSTATUS WINAPI IoSetDeviceInterfaceState( UNICODE_STRING *name, BOOLEAN enable
|
||||||
if (enable && iface->enabled)
|
if (enable && iface->enabled)
|
||||||
return STATUS_OBJECT_NAME_EXISTS;
|
return STATUS_OBJECT_NAME_EXISTS;
|
||||||
|
|
||||||
refstr = memrchrW(name->Buffer + 4, '\\', namelen - 4);
|
for (p = name->Buffer + 4, refstr = NULL; p < name->Buffer + namelen; p++)
|
||||||
|
if (*p == '\\') refstr = p;
|
||||||
|
if (!refstr) refstr = p;
|
||||||
|
|
||||||
if (!guid_from_string( (refstr ? refstr : name->Buffer + namelen) - 38, &class ))
|
if (!guid_from_string( refstr - 38, &class ))
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
len = strlenW(DeviceClassesW) + 38 + 1 + namelen + 2 + 1;
|
len = lstrlenW(DeviceClassesW) + 38 + 1 + namelen + 2 + 1;
|
||||||
|
|
||||||
if (!(path = heap_alloc( len * sizeof(WCHAR) )))
|
if (!(path = heap_alloc( len * sizeof(WCHAR) )))
|
||||||
return STATUS_NO_MEMORY;
|
return STATUS_NO_MEMORY;
|
||||||
|
|
||||||
strcpyW( path, DeviceClassesW );
|
lstrcpyW( path, DeviceClassesW );
|
||||||
lstrcpynW( path + strlenW( path ), (refstr ? refstr : name->Buffer + namelen) - 38, 39 );
|
lstrcpynW( path + lstrlenW( path ), refstr - 38, 39 );
|
||||||
strcatW( path, slashW );
|
lstrcatW( path, slashW );
|
||||||
p = path + strlenW( path );
|
p = path + lstrlenW( path );
|
||||||
lstrcpynW( path + strlenW( path ), name->Buffer, (refstr ? (refstr - name->Buffer) : namelen) + 1 );
|
lstrcpynW( path + lstrlenW( path ), name->Buffer, (refstr - name->Buffer) + 1 );
|
||||||
p[0] = p[1] = p[3] = '#';
|
p[0] = p[1] = p[3] = '#';
|
||||||
strcatW( path, slashW );
|
lstrcatW( path, slashW );
|
||||||
strcatW( path, hashW );
|
lstrcatW( path, hashW );
|
||||||
if (refstr)
|
if (refstr < name->Buffer + namelen)
|
||||||
lstrcpynW( path + strlenW( path ), refstr, name->Buffer + namelen - refstr + 1 );
|
lstrcpynW( path + lstrlenW( path ), refstr, name->Buffer + namelen - refstr + 1 );
|
||||||
|
|
||||||
attr.Length = sizeof(attr);
|
attr.Length = sizeof(attr);
|
||||||
attr.ObjectName = &string;
|
attr.ObjectName = &string;
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue