mirror of
https://github.com/reactos/reactos.git
synced 2024-12-26 17:14:41 +00:00
Miscellaneous implementation of kernel32 stubs.
Changed the implementation of ReadFileEx. svn path=/trunk/; revision=678
This commit is contained in:
parent
3174c5069a
commit
1d786dd865
7 changed files with 460 additions and 204 deletions
|
@ -20,6 +20,9 @@
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL WriteFile(HANDLE hFile,
|
WINBOOL STDCALL WriteFile(HANDLE hFile,
|
||||||
LPCVOID lpBuffer,
|
LPCVOID lpBuffer,
|
||||||
DWORD nNumberOfBytesToWrite,
|
DWORD nNumberOfBytesToWrite,
|
||||||
|
@ -74,13 +77,13 @@ WINBOOL STDCALL WriteFile(HANDLE hFile,
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
WINBOOL STDCALL KERNEL32_ReadFile(HANDLE hFile,
|
|
||||||
LPVOID lpBuffer,
|
|
||||||
DWORD nNumberOfBytesToRead,
|
WINBOOL STDCALL ReadFile(HANDLE hFile,
|
||||||
LPDWORD lpNumberOfBytesRead,
|
LPVOID lpBuffer,
|
||||||
LPOVERLAPPED lpOverLapped,
|
DWORD nNumberOfBytesToRead,
|
||||||
LPOVERLAPPED_COMPLETION_ROUTINE
|
LPDWORD lpNumberOfBytesRead,
|
||||||
lpCompletionRoutine)
|
LPOVERLAPPED lpOverLapped)
|
||||||
{
|
{
|
||||||
HANDLE hEvent = NULL;
|
HANDLE hEvent = NULL;
|
||||||
LARGE_INTEGER Offset;
|
LARGE_INTEGER Offset;
|
||||||
|
@ -106,7 +109,7 @@ WINBOOL STDCALL KERNEL32_ReadFile(HANDLE hFile,
|
||||||
|
|
||||||
errCode = NtReadFile(hFile,
|
errCode = NtReadFile(hFile,
|
||||||
hEvent,
|
hEvent,
|
||||||
(PIO_APC_ROUTINE)lpCompletionRoutine,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
IoStatusBlock,
|
IoStatusBlock,
|
||||||
lpBuffer,
|
lpBuffer,
|
||||||
|
@ -127,18 +130,61 @@ WINBOOL STDCALL KERNEL32_ReadFile(HANDLE hFile,
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
WINBOOL STDCALL ReadFile(HANDLE hFile,
|
VOID ApcRoutine(PVOID ApcContext, struct _IO_STATUS_BLOCK* IoStatusBlock, ULONG NumberOfBytesTransfered)
|
||||||
LPVOID lpBuffer,
|
|
||||||
DWORD nNumberOfBytesToRead,
|
|
||||||
LPDWORD lpNumberOfBytesRead,
|
|
||||||
LPOVERLAPPED lpOverLapped)
|
|
||||||
{
|
{
|
||||||
return(KERNEL32_ReadFile(hFile,
|
DWORD dwErrorCode;
|
||||||
lpBuffer,
|
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine = (LPOVERLAPPED_COMPLETION_ROUTINE)ApcContext;
|
||||||
nNumberOfBytesToRead,
|
|
||||||
lpNumberOfBytesRead,
|
dwErrorCode = RtlNtStatusToDosError( IoStatusBlock->Status);
|
||||||
lpOverLapped,
|
lpCompletionRoutine( dwErrorCode, NumberOfBytesTransfered, (LPOVERLAPPED)IoStatusBlock );
|
||||||
NULL));
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WINBOOL WriteFileEx(
|
||||||
|
HANDLE hFile,
|
||||||
|
LPCVOID lpBuffer,
|
||||||
|
DWORD nNumberOfBytesToWrite,
|
||||||
|
LPOVERLAPPED lpOverLapped,
|
||||||
|
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
LARGE_INTEGER Offset;
|
||||||
|
NTSTATUS errCode;
|
||||||
|
PIO_STATUS_BLOCK IoStatusBlock;
|
||||||
|
PLARGE_INTEGER ptrOffset;
|
||||||
|
|
||||||
|
DPRINT("WriteFileEx(hFile %x)\n",hFile);
|
||||||
|
|
||||||
|
if (lpOverLapped == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
Offset.u.LowPart = lpOverLapped->Offset;
|
||||||
|
Offset.u.HighPart = lpOverLapped->OffsetHigh;
|
||||||
|
lpOverLapped->Internal = STATUS_PENDING;
|
||||||
|
IoStatusBlock = (PIO_STATUS_BLOCK)lpOverLapped;
|
||||||
|
ptrOffset = &Offset;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
errCode = NtWriteFile(hFile,
|
||||||
|
NULL,
|
||||||
|
ApcRoutine,
|
||||||
|
lpCompletionRoutine,
|
||||||
|
IoStatusBlock,
|
||||||
|
(PVOID)lpBuffer,
|
||||||
|
nNumberOfBytesToWrite,
|
||||||
|
ptrOffset,
|
||||||
|
NULL);
|
||||||
|
if (!NT_SUCCESS(errCode))
|
||||||
|
{
|
||||||
|
SetLastError(RtlNtStatusToDosError(errCode));
|
||||||
|
DPRINT("WriteFileEx() failed\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DPRINT("WriteFileEx() succeeded\n");
|
||||||
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
WINBOOL STDCALL ReadFileEx(HANDLE hFile,
|
WINBOOL STDCALL ReadFileEx(HANDLE hFile,
|
||||||
|
@ -147,10 +193,36 @@ WINBOOL STDCALL ReadFileEx(HANDLE hFile,
|
||||||
LPOVERLAPPED lpOverLapped,
|
LPOVERLAPPED lpOverLapped,
|
||||||
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
|
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
|
||||||
{
|
{
|
||||||
return(KERNEL32_ReadFile(hFile,
|
LARGE_INTEGER Offset;
|
||||||
lpBuffer,
|
NTSTATUS errCode;
|
||||||
nNumberOfBytesToRead,
|
PIO_STATUS_BLOCK IoStatusBlock;
|
||||||
NULL,
|
PLARGE_INTEGER ptrOffset;
|
||||||
lpOverLapped,
|
|
||||||
lpCompletionRoutine));
|
if (lpOverLapped == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
Offset.u.LowPart = lpOverLapped->Offset;
|
||||||
|
Offset.u.HighPart = lpOverLapped->OffsetHigh;
|
||||||
|
lpOverLapped->Internal = STATUS_PENDING;
|
||||||
|
IoStatusBlock = (PIO_STATUS_BLOCK)lpOverLapped;
|
||||||
|
ptrOffset = &Offset;
|
||||||
|
|
||||||
|
|
||||||
|
errCode = NtReadFile(hFile,
|
||||||
|
NULL,
|
||||||
|
ApcRoutine,
|
||||||
|
lpCompletionRoutine,
|
||||||
|
IoStatusBlock,
|
||||||
|
lpBuffer,
|
||||||
|
nNumberOfBytesToRead,
|
||||||
|
ptrOffset,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
|
||||||
|
if (!NT_SUCCESS(errCode))
|
||||||
|
{
|
||||||
|
SetLastError(RtlNtStatusToDosError(errCode));
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $Id: makefile,v 1.25 1999/09/27 20:58:44 ariadne Exp $
|
# $Id: makefile,v 1.26 1999/10/02 20:20:42 ariadne Exp $
|
||||||
#
|
#
|
||||||
# ReactOS Operating System
|
# ReactOS Operating System
|
||||||
#
|
#
|
||||||
|
@ -32,7 +32,7 @@ FILE_OBJECTS = file/file.o file/curdir.o file/lfile.o file/dir.o \
|
||||||
file/create.o file/find.o file/copy.o file/pipe.o \
|
file/create.o file/find.o file/copy.o file/pipe.o \
|
||||||
file/move.o file/lock.o file/rw.o file/delete.o
|
file/move.o file/lock.o file/rw.o file/delete.o
|
||||||
|
|
||||||
MEM_OBJECTS = mem/virtual.o mem/heap.o mem/utils.o mem/section.o
|
MEM_OBJECTS = mem/virtual.o mem/heap.o mem/utils.o mem/section.o mem/isbad.o
|
||||||
|
|
||||||
NLS_OBJECTS = nls/codepage.o nls/cpmisc.o nls/cptable.o\
|
NLS_OBJECTS = nls/codepage.o nls/cpmisc.o nls/cptable.o\
|
||||||
nls/cp37.o nls/cp437.o nls/cp500.o nls/cp737.o nls/cp775.o nls/cp850.o nls/cp852.o nls/cp855.o nls/cp857.o\
|
nls/cp37.o nls/cp437.o nls/cp500.o nls/cp737.o nls/cp775.o nls/cp850.o nls/cp852.o nls/cp855.o nls/cp857.o\
|
||||||
|
|
111
reactos/lib/kernel32/mem/isbad.c
Normal file
111
reactos/lib/kernel32/mem/isbad.c
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
WINBOOL
|
||||||
|
STDCALL
|
||||||
|
IsBadReadPtr( CONST VOID *lp, UINT ucb )
|
||||||
|
{
|
||||||
|
MEMORY_BASIC_INFORMATION MemoryInformation;
|
||||||
|
|
||||||
|
if ( ucb == 0 )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
VirtualQuery( lp, &MemoryInformation, sizeof(MEMORY_BASIC_INFORMATION) );
|
||||||
|
|
||||||
|
if ( MemoryInformation.State != MEM_COMMIT )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if ( MemoryInformation.RegionSize < ucb )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if ( MemoryInformation.Protect == PAGE_EXECUTE )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if ( MemoryInformation.Protect == PAGE_NOACCESS )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
WINBOOL
|
||||||
|
STDCALL
|
||||||
|
IsBadHugeReadPtr( CONST VOID *lp, UINT ucb )
|
||||||
|
{
|
||||||
|
return IsBadReadPtr(lp,ucb);
|
||||||
|
}
|
||||||
|
|
||||||
|
WINBOOL
|
||||||
|
STDCALL
|
||||||
|
IsBadCodePtr( FARPROC lpfn )
|
||||||
|
{
|
||||||
|
MEMORY_BASIC_INFORMATION MemoryInformation;
|
||||||
|
|
||||||
|
|
||||||
|
VirtualQuery( lpfn, &MemoryInformation, sizeof(MEMORY_BASIC_INFORMATION) );
|
||||||
|
|
||||||
|
if ( MemoryInformation.State != MEM_COMMIT )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
|
||||||
|
if ( MemoryInformation.Protect == PAGE_EXECUTE || MemoryInformation.Protect == PAGE_EXECUTE_READ)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
WINBOOL
|
||||||
|
STDCALL IsBadWritePtr( LPVOID lp, UINT ucb )
|
||||||
|
{
|
||||||
|
MEMORY_BASIC_INFORMATION MemoryInformation;
|
||||||
|
|
||||||
|
if ( ucb == 0 )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
VirtualQuery( lp, &MemoryInformation, sizeof(MEMORY_BASIC_INFORMATION) );
|
||||||
|
|
||||||
|
if ( MemoryInformation.State != MEM_COMMIT )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
|
||||||
|
if ( MemoryInformation.RegionSize < ucb )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
|
||||||
|
if ( MemoryInformation.Protect == PAGE_READONLY)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if ( MemoryInformation.Protect == PAGE_EXECUTE || MemoryInformation.Protect == PAGE_EXECUTE_READ)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if ( MemoryInformation.Protect == PAGE_NOACCESS )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
WINBOOL
|
||||||
|
STDCALL
|
||||||
|
IsBadHugeWritePtr(
|
||||||
|
LPVOID lp,
|
||||||
|
UINT ucb
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return IsBadWritePtr(lp,ucb);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WINBOOL
|
||||||
|
STDCALL
|
||||||
|
IsBadStringPtrW( LPCWSTR lpsz, UINT ucchMax )
|
||||||
|
{
|
||||||
|
UINT Len = wcsnlen(lpsz+1,ucchMax>>1);
|
||||||
|
return IsBadReadPtr(lpsz,Len<<1);
|
||||||
|
}
|
||||||
|
|
||||||
|
WINBOOL
|
||||||
|
STDCALL
|
||||||
|
IsBadStringPtrA( LPCSTR lpsz, UINT ucchMax )
|
||||||
|
{
|
||||||
|
UINT Len = strnlen(lpsz+1,ucchMax);
|
||||||
|
return IsBadReadPtr(lpsz,Len);
|
||||||
|
}
|
|
@ -101,3 +101,80 @@ WINBOOL STDCALL VirtualProtectEx(HANDLE hProcess,
|
||||||
}
|
}
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WINBOOL
|
||||||
|
STDCALL
|
||||||
|
VirtualLock (
|
||||||
|
LPVOID lpAddress,
|
||||||
|
DWORD dwSize
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ULONG BytesLocked;
|
||||||
|
NTSTATUS Status;
|
||||||
|
Status = NtLockVirtualMemory(NtCurrentProcess(),lpAddress,dwSize, &BytesLocked);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
SetLastError(RtlNtStatusToDosError(Status));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD
|
||||||
|
STDCALL
|
||||||
|
VirtualQuery (
|
||||||
|
LPCVOID lpAddress,
|
||||||
|
PMEMORY_BASIC_INFORMATION lpBuffer,
|
||||||
|
DWORD dwLength
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return VirtualQueryEx (NtCurrentProcess(),lpAddress, lpBuffer, dwLength );
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MemoryBasicInformation 0
|
||||||
|
DWORD
|
||||||
|
STDCALL
|
||||||
|
VirtualQueryEx (
|
||||||
|
HANDLE hProcess,
|
||||||
|
LPCVOID lpAddress,
|
||||||
|
PMEMORY_BASIC_INFORMATION lpBuffer,
|
||||||
|
DWORD dwLength
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
ULONG ResultLength;
|
||||||
|
|
||||||
|
Status = NtQueryVirtualMemory(
|
||||||
|
hProcess,(LPVOID)lpAddress,
|
||||||
|
MemoryBasicInformation, lpBuffer,
|
||||||
|
sizeof(MEMORY_BASIC_INFORMATION),
|
||||||
|
&ResultLength );
|
||||||
|
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
SetLastError(RtlNtStatusToDosError(Status));
|
||||||
|
return ResultLength;
|
||||||
|
}
|
||||||
|
return ResultLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WINBOOL
|
||||||
|
STDCALL
|
||||||
|
VirtualUnlock (
|
||||||
|
LPVOID lpAddress,
|
||||||
|
DWORD dwSize
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ULONG BytesLocked;
|
||||||
|
NTSTATUS Status;
|
||||||
|
Status = NtUnlockVirtualMemory(NtCurrentProcess(),lpAddress,dwSize, &BytesLocked);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
SetLastError(RtlNtStatusToDosError(Status));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
|
@ -346,3 +346,153 @@ FreeEnvironmentStringsW(
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ExpandVariableA(
|
||||||
|
LPCSTR lpSrc, LPSTR lpDst, DWORD nSize , DWORD *nWritten)
|
||||||
|
{
|
||||||
|
int nVar = 0;
|
||||||
|
LPSTR lpVar;
|
||||||
|
LPSTR lpEnd;
|
||||||
|
|
||||||
|
if ( nWritten == NULL )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ( *lpSrc != '%' ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lpVar = (LPSTR)lpSrc;
|
||||||
|
lpVar++;
|
||||||
|
|
||||||
|
|
||||||
|
lpEnd = strchr( lpVar, '%' );
|
||||||
|
if ( lpEnd == NULL ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*lpEnd = 0;
|
||||||
|
|
||||||
|
nWritten = GetEnvironmentVariableA(lpVar,lpDst,nSize);
|
||||||
|
*lpEnd = '%';
|
||||||
|
|
||||||
|
if ( nWritten == 0 )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ( nWritten > nSize )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return (lpEnd - lpVar) -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD STDCALL ExpandEnvironmentStringsA(
|
||||||
|
LPCSTR lpSrc, LPSTR lpDst, DWORD nSize
|
||||||
|
)
|
||||||
|
{
|
||||||
|
DWORD v;
|
||||||
|
DWORD bw;
|
||||||
|
|
||||||
|
while(*lpSrc != 0 && nSize > 0 )
|
||||||
|
{
|
||||||
|
if ( *lpSrc == '%' ) {
|
||||||
|
v = ExpandVariableA(lpSrc,lpDst,nSize , &bw);
|
||||||
|
if ( v == -1 ) {
|
||||||
|
*lpDst = *lpSrc;
|
||||||
|
lpDst++;
|
||||||
|
lpSrc++;
|
||||||
|
nSize--;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lpSrc+=v;
|
||||||
|
lpDst+=bw;
|
||||||
|
nSize-=bw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
*lpDst = *lpSrc;
|
||||||
|
lpDst++;
|
||||||
|
lpSrc++;
|
||||||
|
nSize--;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int ExpandVariableW(
|
||||||
|
LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize , DWORD *nWritten)
|
||||||
|
{
|
||||||
|
LPWSTR lpVar;
|
||||||
|
LPWSTR lpEnd;
|
||||||
|
|
||||||
|
if ( nWritten == NULL )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ( *lpSrc != L'%' ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lpVar = (LPWSTR)lpSrc;
|
||||||
|
lpVar++;
|
||||||
|
|
||||||
|
|
||||||
|
lpEnd = wcschr( lpVar, L'%' );
|
||||||
|
if ( lpEnd == NULL ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*lpEnd = 0;
|
||||||
|
|
||||||
|
nWritten = GetEnvironmentVariableW(lpVar,lpDst,nSize);
|
||||||
|
*lpEnd = L'%';
|
||||||
|
|
||||||
|
if ( nWritten == 0 )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ( nWritten > nSize )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return ((lpEnd - lpVar)/2) -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DWORD STDCALL ExpandEnvironmentStringsW(
|
||||||
|
LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize
|
||||||
|
)
|
||||||
|
{
|
||||||
|
DWORD v;
|
||||||
|
DWORD bw;
|
||||||
|
|
||||||
|
while(*lpSrc != 0 && nSize > 0 )
|
||||||
|
{
|
||||||
|
if ( *lpSrc == L'%' ) {
|
||||||
|
v = ExpandVariableW(lpSrc,lpDst,nSize , &bw);
|
||||||
|
if ( v == -1 ) {
|
||||||
|
*lpDst = *lpSrc;
|
||||||
|
lpDst++;
|
||||||
|
lpSrc++;
|
||||||
|
nSize--;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lpSrc+=v;
|
||||||
|
lpDst+=bw;
|
||||||
|
nSize-=bw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
*lpDst = *lpSrc;
|
||||||
|
lpDst++;
|
||||||
|
lpSrc++;
|
||||||
|
nSize--;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: stubs.c,v 1.4 1999/09/27 20:58:44 ariadne Exp $
|
/* $Id: stubs.c,v 1.5 1999/10/02 20:20:44 ariadne Exp $
|
||||||
*
|
*
|
||||||
* KERNEL32.DLL stubs (unimplemented functions)
|
* KERNEL32.DLL stubs (unimplemented functions)
|
||||||
* Remove from this file, if you implement them.
|
* Remove from this file, if you implement them.
|
||||||
|
@ -815,30 +815,6 @@ ExitVDM (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD
|
|
||||||
STDCALL
|
|
||||||
ExpandEnvironmentStringsW (
|
|
||||||
LPCWSTR lpSrc,
|
|
||||||
LPWSTR lpDst,
|
|
||||||
DWORD nSize
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD
|
|
||||||
STDCALL
|
|
||||||
ExpandEnvironmentStringsA (
|
|
||||||
LPCSTR lpSrc,
|
|
||||||
LPSTR lpDst,
|
|
||||||
DWORD nSize
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
|
@ -2751,87 +2727,6 @@ InvalidateConsoleDIBits (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
IsBadCodePtr (
|
|
||||||
FARPROC lpfn
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
IsBadHugeReadPtr (
|
|
||||||
CONST VOID * lp,
|
|
||||||
UINT ucb
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
IsBadHugeWritePtr (
|
|
||||||
LPVOID lp,
|
|
||||||
UINT ucb
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
IsBadReadPtr (
|
|
||||||
CONST VOID * lp,
|
|
||||||
UINT ucb
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
IsBadStringPtrA (
|
|
||||||
LPCSTR lpsz,
|
|
||||||
UINT ucchMax
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
IsBadStringPtrW (
|
|
||||||
LPCWSTR lpsz,
|
|
||||||
UINT ucchMax
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
IsBadWritePtr (
|
|
||||||
LPVOID lp,
|
|
||||||
UINT ucb
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
WINBOOL
|
||||||
|
@ -3893,16 +3788,6 @@ SizeofResource (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
TerminateThread (
|
|
||||||
HANDLE hThread,
|
|
||||||
DWORD dwExitCode
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
LPVOID
|
LPVOID
|
||||||
|
@ -4063,56 +3948,8 @@ VirtualBufferExceptionHandler (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
VirtualLock (
|
|
||||||
LPVOID lpAddress,
|
|
||||||
DWORD dwSize
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD
|
|
||||||
STDCALL
|
|
||||||
VirtualQuery (
|
|
||||||
LPCVOID lpAddress,
|
|
||||||
PMEMORY_BASIC_INFORMATION lpBuffer,
|
|
||||||
DWORD dwLength
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DWORD
|
|
||||||
STDCALL
|
|
||||||
VirtualQueryEx (
|
|
||||||
HANDLE hProcess,
|
|
||||||
LPCVOID lpAddress,
|
|
||||||
PMEMORY_BASIC_INFORMATION lpBuffer,
|
|
||||||
DWORD dwLength
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
VirtualUnlock (
|
|
||||||
LPVOID lpAddress,
|
|
||||||
DWORD dwSize
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
WINBOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
|
@ -4209,19 +4046,7 @@ WriteConsoleInputVDMW (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
|
||||||
STDCALL
|
|
||||||
WriteFileEx (
|
|
||||||
HANDLE hFile,
|
|
||||||
LPCVOID lpBuffer,
|
|
||||||
DWORD nNumberOfBytesToWrite,
|
|
||||||
LPOVERLAPPED lpOverlapped,
|
|
||||||
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
|
|
||||||
)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
WINBOOL
|
||||||
|
|
|
@ -269,6 +269,27 @@ DWORD STDCALL ResumeThread(HANDLE hThread)
|
||||||
return PreviousResumeCount;
|
return PreviousResumeCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WINBOOL
|
||||||
|
STDCALL
|
||||||
|
TerminateThread (
|
||||||
|
HANDLE hThread,
|
||||||
|
DWORD dwExitCode
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS errCode;
|
||||||
|
|
||||||
|
errCode = NtTerminateThread(hThread,
|
||||||
|
dwExitCode);
|
||||||
|
if (!NT_SUCCESS(errCode))
|
||||||
|
{
|
||||||
|
SetLastError(RtlNtStatusToDosError(errCode));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL SuspendThread(HANDLE hThread)
|
DWORD STDCALL SuspendThread(HANDLE hThread)
|
||||||
{
|
{
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
|
|
Loading…
Reference in a new issue