Windows kpgd lookup method0 and method1 are _only_ functional if the CR3 value is returned by the driver. This fact has been a bit buried via the use of kv2p which falls back to the driver as well to get a dtb. It is however a very quirky setup where kernel memory accesses are sometimes translated via the CR3 value (while vmi->kpgd isn't know) and then by the kernel page table. This PR disallows the use kv2p while the real kernel pgd is unknown to provide a more consistent setup.
vmi_read_addr_* is only meaningful if the width of the addr is known. The existing setup always fell back on 32-bit addr width when the page mode is unknown, thus breaking file-mode on 64-bit memory dumps. This patch fixes this issue by employing heuristics during page mode detection in Windows to check if we have 32-bit or 64-bit addresses.
Introduce generic memory access functions via the access_context_t structure
Reduce code-duplication in read.c
Reduce code-duplication in write.c
Add example of using access_context_t and vmi_get_va_pages
Introduce vmi_write_addr_* functions
Extra debug/error output and formatting
Clean up the Xen event version checks and make events work with the latest 4.5 master branch.
Switch errprint to dbprint for non-critical errors in events
Fix 32-bit Windows 7 initialization errors and process list example not working. Switched it to walk PsActiveProcessHead instead of PsInitialSystemProcess.
Adding some new ignores.
Restore find kpgd_method2 as a fallback.

Also fixes missing 'case' in switch statement.
Expose vmi_read in libvmi.h
vmi_read_X_va should return on error on PARTIAL init.
Allow VMI_PARTIAL for live VMs.
Keep track of the last used page to properly unmap it once the user accesses another page when the page cache is disabled.
Add macro to check for the global bit in the page structures