#include "wine/server.h"
#include "wine/list.h"
#include "wine/debug.h"
+#define ETERSOFT_IOCTL
+#include "wine/etersoft.h"
WINE_DEFAULT_DEBUG_CHANNEL(ntoskrnl);
WINE_DECLARE_DEBUG_CHANNEL(relay);
#define IOCTL_WINE_DRIVER_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x101, \
METHOD_BUFFERED, FILE_ANY_ACCESS)
-#define UPKEY_NKEY_DATA_SIZE 65535
-
#ifdef __i386__
#define DEFINE_FASTCALL1_ENTRYPOINT( name ) \
__ASM_GLOBAL_FUNC( name, \
HANDLE process = NULL;
CHAR *data = NULL;
void *saved_ptr = NULL;
- ULONG offset = 0, offset2 = 0;
TRACE( "ioctl %x device %p in_size %u out_size %u\n", code, device, in_size, *out_size );
- /* HACK for UPKey.sys and NKey.sys */
- if (0x3fc == code) offset = 2;
- else if (0x222040 == code || 0x222044 == code || 0x222048 == code ||
- 0x22204c == code || 0x222050 == code || 0x222060 == code ||
- 0x222080 == code || 0x2220c0 == code || 0x222100 == code ||
- 0x222104 == code || 0x222108 == code || 0x222110 == code ||
- 0x222118 == code || 0x222120 == code ||
- 0x3e8 == code || 0x3e9 == code || 0x44c == code || 0x456 == code)
- offset = 8;
- else if (0x2220d8 == code)
- {
- offset = 14;
- offset2 = 8;
- }
- if (offset && in_buff)
- {
- data = HeapAlloc( GetProcessHeap(), 0, UPKEY_NKEY_DATA_SIZE );
- if (data == NULL) return STATUS_NO_MEMORY;
- saved_ptr = *(void**)((char *)in_buff + offset);
- *(void**)((char *)in_buff + offset) = data;
- if (offset2)
- *(void**)((char *)in_buff + offset2) = data +
- (*(char**)((char *)in_buff + offset2) - (char *)saved_ptr);
- process = OpenProcess( PROCESS_ALL_ACCESS, FALSE, get_pid() );
- if (process != NULL)
- NtReadVirtualMemory( process, saved_ptr, data, UPKEY_NKEY_DATA_SIZE, NULL );
- }
-
+ LOADETER_FUNC( etersoft_ioctl_pre );
+ if (etersoft_ioctl_pre && etersoft_ioctl_pre( code, in_buff, get_pid(),
+ &saved_ptr, &data, &process ))
+ return STATUS_UNSUCCESSFUL;
file = ExAllocatePool( NonPagedPool, sizeof(*file) );
if (file == NULL)
{
KeQueryTickCount( &count ); /* update the global KeTickCount */
status = IoCallDriver( device, irp );
end:
- if (process)
- {
- NtWriteVirtualMemory( process, saved_ptr, data, UPKEY_NKEY_DATA_SIZE, NULL );
- CloseHandle( process );
- }
- if (data) HeapFree( GetProcessHeap(), 0, data );
+ LOADETER_FUNC( etersoft_ioctl_post );
+ if (etersoft_ioctl_post)
+ etersoft_ioctl_post( process, saved_ptr, data );
*out_size = (status >= 0) ? iosb.Information : 0;
return status;
}