📄 win32.c
字号:
static double ofreq=0.0; int i; int x,y; i=time(NULL); if (ofreq != 0.0) return ofreq; while(i==time(NULL)); x=localcount(); i++; while(i==time(NULL)); y=localcount(); ofreq = (double)(y-x)/1000.; return ofreq;}static double CPU_Freq(){ double freq; if ((freq = linux_cpuinfo_freq()) > 0) return freq; if ((freq = solaris_kstat_freq()) > 0) return freq; return tsc_freq();}static long WINAPI expQueryPerformanceFrequency(long long* z){ *z=(long long)CPU_Freq(); dbgprintf("QueryPerformanceFrequency(%p) => 1 ( %Ld )\n", z, *z); return 1;}static long WINAPI exptimeGetTime(){ struct timeval t; long result; gettimeofday(&t, 0); result=1000*t.tv_sec+t.tv_usec/1000; dbgprintf("timeGetTime() => %ld\n", result); return result;}static void* WINAPI expLocalHandle(void* v){ dbgprintf("LocalHandle(%p) => %p\n", v, v); return v;}static void* WINAPI expGlobalHandle(void* v){ dbgprintf("GlobalHandle(%p) => %p\n", v, v); return v;}static int WINAPI expGlobalUnlock(void* v){ dbgprintf("GlobalUnlock(%p) => 1\n", v); return 1;}static void* WINAPI expGlobalFree(void* v){ dbgprintf("GlobalFree(%p) => 0\n", v); my_release(v); //free(v); return 0;}static void* WINAPI expGlobalReAlloc(void* v, int size, int flags){ void* result=my_realloc(v, size); //void* result=realloc(v, size); dbgprintf("GlobalReAlloc(%p, size %d, flags 0x%x) => %p\n", v,size,flags,result); return result;}static int WINAPI expLocalUnlock(void* v){ dbgprintf("LocalUnlock(%p) => 1\n", v); return 1;}//static void* WINAPI expLocalFree(void* v){ dbgprintf("LocalFree(%p) => 0\n", v); my_release(v); return 0;}static HRSRC WINAPI expFindResourceA(HMODULE module, char* name, char* type){ HRSRC result; result=FindResourceA(module, name, type); dbgprintf("FindResourceA(module 0x%x, name %p(%s), type %p(%s)) => 0x%x\n", module, name, HIWORD(name) ? name : "UNICODE", type, HIWORD(type) ? type : "UNICODE", result); return result;}extern HRSRC WINAPI LoadResource(HMODULE, HRSRC);static HGLOBAL WINAPI expLoadResource(HMODULE module, HRSRC res){ HGLOBAL result=LoadResource(module, res); dbgprintf("LoadResource(module 0x%x, resource 0x%x) => 0x%x\n", module, res, result); return result;}static void* WINAPI expLockResource(long res){ void* result=LockResource(res); dbgprintf("LockResource(0x%lx) => %p\n", res, result); return result;}static int WINAPI expFreeResource(long res){ int result=FreeResource(res); dbgprintf("FreeResource(0x%lx) => %d\n", res, result); return result;}//bool fun(HANDLE)//!0 on successstatic int WINAPI expCloseHandle(long v1){ dbgprintf("CloseHandle(0x%lx) => 1\n", v1); /* do not close stdin,stdout and stderr */ if (v1 > 2) if (!close(v1)) return 0; return 1;}static const char* WINAPI expGetCommandLineA(){ dbgprintf("GetCommandLineA() => \"c:\\aviplay.exe\"\n"); return "c:\\aviplay.exe";}static short envs[]={'p', 'a', 't', 'h', ' ', 'c', ':', '\\', 0, 0};static LPWSTR WINAPI expGetEnvironmentStringsW(){ dbgprintf("GetEnvironmentStringsW() => 0\n"); return 0;}static void * WINAPI expRtlZeroMemory(void *p, size_t len){ void* result=memset(p,0,len); dbgprintf("RtlZeroMemory(%p, len %d) => %p\n",p,len,result); return result;}static void * WINAPI expRtlMoveMemory(void *dst, void *src, size_t len){ void* result=memmove(dst,src,len); dbgprintf("RtlMoveMemory (dest %p, src %p, len %d) => %p\n",dst,src,len,result); return result;}static void * WINAPI expRtlFillMemory(void *p, int ch, size_t len){ void* result=memset(p,ch,len); dbgprintf("RtlFillMemory(%p, char 0x%x, len %d) => %p\n",p,ch,len,result); return result;}static int WINAPI expFreeEnvironmentStringsW(short* strings){ dbgprintf("FreeEnvironmentStringsW(%p) => 1\n", strings); return 1;}static int WINAPI expFreeEnvironmentStringsA(char* strings){ dbgprintf("FreeEnvironmentStringsA(%p) => 1\n", strings); return 1;}static const char ch_envs[]="__MSVCRT_HEAP_SELECT=__GLOBAL_HEAP_SELECTED,1\r\n""PATH=C:\\;C:\\windows\\;C:\\windows\\system\r\n";static LPCSTR WINAPI expGetEnvironmentStrings(){ dbgprintf("GetEnvironmentStrings() => %p\n", ch_envs); return (LPCSTR)ch_envs; // dbgprintf("GetEnvironmentStrings() => 0\n"); // return 0;}static int WINAPI expGetStartupInfoA(STARTUPINFOA *s){ /* int i; -- unused */ dbgprintf("GetStartupInfoA(%p) => 1\n", s); memset(s, 0, sizeof(*s)); s->cb=sizeof(*s); // s->lpReserved="Reserved"; // s->lpDesktop="Desktop"; // s->lpTitle="Title"; // s->dwX=s->dwY=0; // s->dwXSize=s->dwYSize=200; s->dwFlags=s->wShowWindow=1; // s->hStdInput=s->hStdOutput=s->hStdError=0x1234; dbgprintf(" cb=%ld\n", s->cb); dbgprintf(" lpReserved='%s'\n", s->lpReserved); dbgprintf(" lpDesktop='%s'\n", s->lpDesktop); dbgprintf(" lpTitle='%s'\n", s->lpTitle); dbgprintf(" dwX=%ld dwY=%ld dwXSize=%ld dwYSize=%ld\n", s->dwX, s->dwY, s->dwXSize, s->dwYSize); dbgprintf(" dwXCountChars=%ld dwYCountChars=%ld dwFillAttribute=%ld\n", s->dwXCountChars, s->dwYCountChars, s->dwFillAttribute); dbgprintf(" dwFlags=0x%lx wShowWindow=0x%x cbReserved2=0x%x\n", s->dwFlags, s->wShowWindow, s->cbReserved2); dbgprintf(" lpReserved2=%p hStdInput=0x%x hStdOutput=0x%x hStdError=0x%x\n", s->lpReserved2, s->hStdInput, s->hStdOutput, s->hStdError); return 1;}static int WINAPI expGetStdHandle(int z){ z += 0x1234; dbgprintf("GetStdHandle(0x%x) => 0x%x\n", z, z); return z;}#ifdef QTX#define FILE_HANDLE_quicktimeqts ((HANDLE)0x444)#define FILE_HANDLE_quicktimeqtx ((HANDLE)0x445)#endifstatic int WINAPI expGetFileType(int handle){ dbgprintf("GetFileType(0x%x) => 0x3 = pipe\n", handle); return 0x3;}#ifdef QTXstatic int WINAPI expGetFileAttributesA(char *filename){ dbgprintf("GetFileAttributesA(%s) => FILE_ATTR_NORMAL\n", filename); if (strstr(filename, "QuickTime.qts")) return FILE_ATTRIBUTE_SYSTEM; return FILE_ATTRIBUTE_NORMAL;}#endifstatic int WINAPI expSetHandleCount(int count){ dbgprintf("SetHandleCount(0x%x) => 1\n", count); return 1;}static int WINAPI expGetACP(void){ dbgprintf("GetACP() => 0\n"); return 0;}extern WINE_MODREF *MODULE32_LookupHMODULE(HMODULE m);static int WINAPI expGetModuleFileNameA(int module, char* s, int len){ WINE_MODREF *mr; int result; //printf("File name of module %X (%s) requested\n", module, s); if (module == 0 && len >= 12) { /* return caller program name */ strcpy(s, "aviplay.dll"); result=1; } else if(s==0) result=0; else if(len<35) result=0; else { result=1; strcpy(s, "c:\\windows\\system\\"); mr=MODULE32_LookupHMODULE(module); if(mr==0)//oops strcat(s, "aviplay.dll"); else if(strrchr(mr->filename, '/')==NULL) strcat(s, mr->filename); else strcat(s, strrchr(mr->filename, '/')+1); } if(!s) dbgprintf("GetModuleFileNameA(0x%x, NULL, %d) => %d\n", module, len, result); else dbgprintf("GetModuleFileNameA(0x%x, %p, %d) => %d ( '%s' )\n", module, s, len, result, s); return result;}static int WINAPI expSetUnhandledExceptionFilter(void* filter){ dbgprintf("SetUnhandledExceptionFilter(%p) => 1\n", filter); return 1;//unsupported and probably won't ever be supported}static int WINAPI expLoadLibraryA(char* name){ int result = 0; char* lastbc; /* int i; */ if (!name) return -1; // we skip to the last backslash // this is effectively eliminating weird characters in // the text output windows lastbc = strrchr(name, '\\'); if (lastbc) { int i; lastbc++; for (i = 0; 1 ;i++) { name[i] = *lastbc++; if (!name[i]) break; } } if(strncmp(name, "c:\\windows\\", 11)==0) name += 11; if(strncmp(name, ".\\", 2)==0) name += 2; dbgprintf("Entering LoadLibraryA(%s)\n", name); // PIMJ and VIVO audio are loading kernel32.dll if (strcasecmp(name, "kernel32.dll") == 0 || strcasecmp(name, "kernel32") == 0) return MODULE_HANDLE_kernel32;// return ERROR_SUCCESS; /* yeah, we have also the kernel32 calls */ /* exported -> do not return failed! */ if (strcasecmp(name, "user32.dll") == 0 || strcasecmp(name, "user32") == 0)// return MODULE_HANDLE_kernel32; return MODULE_HANDLE_user32;#ifdef QTX if (strcasecmp(name, "wininet.dll") == 0 || strcasecmp(name, "wininet") == 0) return MODULE_HANDLE_wininet; if (strcasecmp(name, "ddraw.dll") == 0 || strcasecmp(name, "ddraw") == 0) return MODULE_HANDLE_ddraw; if (strcasecmp(name, "advapi32.dll") == 0 || strcasecmp(name, "advapi32") == 0) return MODULE_HANDLE_advapi32;#endif result=LoadLibraryA(name); dbgprintf("Returned LoadLibraryA(%p='%s'), def_path=%s => 0x%x\n", name, name, win32_def_path, result); return result;}static int WINAPI expFreeLibrary(int module){#ifdef QTX int result=0; /* FIXME:XXX: qtx svq3 frees up qt.qts */#else int result=FreeLibrary(module);#endif dbgprintf("FreeLibrary(0x%x) => %d\n", module, result); return result;}static void* WINAPI expGetProcAddress(HMODULE mod, char* name){ void* result; switch(mod){ case MODULE_HANDLE_kernel32: result=LookupExternalByName("kernel32.dll", name); break; case MODULE_HANDLE_user32: result=LookupExternalByName("user32.dll", name); break;#ifdef QTX case MODULE_HANDLE_wininet: result=LookupExternalByName("wininet.dll", name); break; case MODULE_HANDLE_ddraw: result=LookupExternalByName("ddraw.dll", name); break; case MODULE_HANDLE_advapi32: result=LookupExternalByName("advapi32.dll", name); break;#endif default: result=GetProcAddress(mod, name); } dbgprintf("GetProcAddress(0x%x, '%s') => %p\n", mod, name, result); return result;}static long WINAPI expCreateFileMappingA(int hFile, void* lpAttr, long flProtect, long dwMaxHigh, long dwMaxLow, const char* name){ long result=CreateFileMappingA(hFile, lpAttr, flProtect, dwMaxHigh, dwMaxLow, name); if(!name) dbgprintf("CreateFileMappingA(file 0x%x, lpAttr %p," "flProtect 0x%lx, dwMaxHigh 0x%lx, dwMaxLow 0x%lx, name 0) => %ld\n", hFile, lpAttr, flProtect, dwMaxHigh, dwMaxLow, result); else dbgprintf("CreateFileMappingA(file 0x%x, lpAttr %p," "flProtect 0x%lx, dwMaxHigh 0x%lx, dwMaxLow 0x%lx, name %p='%s') => %ld\n", hFile, lpAttr, flProtect, dwMaxHigh, dwMaxLow, name, name, result); return result;}static long WINAPI expOpenFileMappingA(long hFile, long hz, const char* name){ long result=OpenFileMappingA(hFile, hz, name); if(!name) dbgprintf("OpenFileMappingA(0x%lx, 0x%lx, 0) => %ld\n", hFile, hz, result); else dbgprintf("OpenFileMappingA(0x%lx, 0x%lx, %p='%s') => %ld\n", hFile, hz, name, name, result); return result;}static void* WINAPI expMapViewOfFile(HANDLE file, DWORD mode, DWORD offHigh, DWORD offLow, DWORD size){ dbgprintf("MapViewOfFile(0x%x, 0x%lx, 0x%lx, 0x%lx, size %ld) => %p\n", file,mode,offHigh,offLow,size,(char*)file+offLow); return (char*)file+offLow;}static void* WINAPI expUnmapViewOfFile(void* view){ dbgprintf("UnmapViewOfFile(%p) => 0\n", view); return 0;}static void* WINAPI expSleep(int time){#if HAVE_NANOSLEEP /* solaris doesn't have thread safe usleep */ struct timespec tsp; tsp.tv_sec = time / 1000000; tsp.tv_nsec = (time % 1000000) * 1000; nanosleep(&tsp, NULL);#else usleep(time);#endif dbgprintf("Sleep(%d) => 0\n", time); return 0;}// why does IV32 codec want to call this? I don't know ...static int WINAPI expCreateCompatibleDC(int hdc){ int dc = 0;//0x81; //dbgprintf("CreateCompatibleDC(%d) => 0x81\n", hdc); dbgprintf("CreateCompatibleDC(%d) => %d\n", hdc, dc); return dc;}static int WINAPI expGetDeviceCaps(int hdc, int unk){ dbgprintf("GetDeviceCaps(0x%x, %d) => 0\n", hdc, unk);#ifdef QTX #define BITSPIXEL 12 #define PLANES 14 if (unk == BITSPIXEL) return 24; if (unk == PLANES) return 1;#endif return 1;}static WIN_BOOL WINAPI expDeleteDC(int hdc){ dbgprintf("DeleteDC(0x%x) => 0\n", hdc); if (hdc == 0x81) return 1; return 0;}static WIN_BOOL WINAPI expDeleteObject(int hdc){ dbgprintf("DeleteObject(0x%x) => 1\n", hdc); /* FIXME - implement code here */ return 1;}/* btvvc32.drv wants this one */static void* WINAPI expGetWindowDC(int hdc){ dbgprintf("GetWindowDC(%d) => 0x0\n", hdc); return 0;}#ifdef QTXstatic int WINAPI expGetWindowRect(HWND win, RECT *r){ dbgprintf("GetWindowRect(0x%x, %p) => 1\n", win, r); /* (win == 0) => desktop */ r->right = PSEUDO_SCREEN_WIDTH; r->left = 0; r->bottom = PSEUDO_SCREEN_HEIGHT; r->top = 0; return 1;}static int WINAPI expMonitorFromWindow(HWND win, int flags){ dbgprintf("MonitorFromWindow(0x%x, 0x%x) => 0\n", win, flags); return 0;}static int WINAPI expMonitorFromRect(RECT *r, int flags){ dbgprintf("MonitorFromRect(%p, 0x%x) => 0\n", r, flags); return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -