コード例 #1
0
ファイル: GetWriteWatch.cpp プロジェクト: uvbs/Holodeck
BOOL My_GetWriteWatch()
{
    DWORD dwFlags=NULL;
    PVOID lpBaseAddress=NULL;
    SIZE_T dwRegionSize=NULL;
    PVOID * lpAddresses=NULL;
    PULONG_PTR lpdwCount=NULL;
    PULONG lpdwGranularity=NULL;
    UINT returnVal_Real = NULL;
    UINT returnVal_Intercepted = NULL;

    DWORD error_Real = 0;
    DWORD error_Intercepted = 0;
    disableInterception();
    returnVal_Real = GetWriteWatch (dwFlags,lpBaseAddress,dwRegionSize,lpAddresses,lpdwCount,lpdwGranularity);
    error_Real = GetLastError();
    enableInterception();
    returnVal_Intercepted = GetWriteWatch (dwFlags,lpBaseAddress,dwRegionSize,lpAddresses,lpdwCount,lpdwGranularity);
    error_Intercepted = GetLastError();
    return ((returnVal_Real == returnVal_Intercepted) && (error_Real == error_Intercepted));
}
コード例 #2
0
ファイル: vm_alloc.cpp プロジェクト: habnabit/macemu
int vm_get_write_watch(void * addr, size_t size,
					   void ** pages, unsigned int * n_pages,
					   int options)
{
#ifdef HAVE_VM_WRITE_WATCH
#ifdef HAVE_WIN32_VM
	DWORD flags = 0;
	if (options & VM_WRITE_WATCH_RESET)
		flags |= WRITE_WATCH_FLAG_RESET;

	ULONG page_size;
	ULONG_PTR count = *n_pages;
	int ret_code = GetWriteWatch(flags, addr, size, pages, &count, &page_size);
	if (ret_code != 0)
		return -1;

	*n_pages = count;
	return 0;
#endif
#endif
	// Unsupported
	return -1;
}