Miscellaneous implementation of kernel32 stubs.
[reactos.git] / reactos / lib / kernel32 / mem / virtual.c
index 606036c..dc8d2c2 100644 (file)
@@ -22,13 +22,14 @@ LPVOID STDCALL VirtualAllocEx(HANDLE hProcess,
    NTSTATUS Status;
    
    Status = ZwAllocateVirtualMemory(hProcess,
-                                   &lpAddress,
+                                   (PVOID *)&lpAddress,
                                    0,
-                                   dwSize,
+                                   (PULONG)&dwSize,
                                    flAllocationType,
                                    flProtect);
-   if (Status != STATUS_SUCCESS)
+   if (!NT_SUCCESS(Status))
      {
+        SetLastError(RtlNtStatusToDosError(Status));
        return(NULL);
      }
    return(lpAddress);
@@ -51,11 +52,12 @@ WINBOOL STDCALL VirtualFreeEx(HANDLE hProcess,
    NTSTATUS Status;
    
    Status = ZwFreeVirtualMemory(hProcess,
-                               &lpAddress,
-                               dwSize,
+                               (PVOID *)&lpAddress,
+                               (PULONG)&dwSize,
                                dwFreeType);
-   if (Status != STATUS_SUCCESS)
+   if (!NT_SUCCESS(Status))
      {
+       SetLastError(RtlNtStatusToDosError(Status));
        return(FALSE);
      }
    return(TRUE);
@@ -88,13 +90,91 @@ WINBOOL STDCALL VirtualProtectEx(HANDLE hProcess,
    NTSTATUS Status;
    
    Status = ZwProtectVirtualMemory(hProcess,
-                                  lpAddress,
+                                  (PVOID)lpAddress,
                                   dwSize,
                                   flNewProtect,
-                                  lpflOldProtect);
+                                  (PULONG)lpflOldProtect);
    if (Status != STATUS_SUCCESS)
      {
+       SetLastError(RtlNtStatusToDosError(Status));
        return(FALSE);
      }
    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;
+}