ntoskrnl: Build with msvcrt.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2019-06-17 09:28:35 +02:00
parent 921e0457c5
commit a1cdcc5290
6 changed files with 124 additions and 181 deletions

View File

@ -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 \

View File

@ -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

View File

@ -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.@)

View File

@ -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

View File

@ -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;

View File

@ -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>