📄 win32.c
字号:
int mhz = 0; kc = kstat_open(); if (kc != NULL) { ksp = kstat_lookup(kc, "cpu_info", 0, "cpu_info0"); /* kstat found and name/value pairs? */ if (ksp != NULL && ksp->ks_type == KSTAT_TYPE_NAMED) { /* read the kstat data from the kernel */ if (kstat_read(kc, ksp, NULL) != -1) { /* * lookup desired "clock_MHz" entry, check the expected * data type */ kdata = (kstat_named_t *)kstat_data_lookup(ksp, "clock_MHz"); if (kdata != NULL && kdata->data_type == KSTAT_DATA_INT32) mhz = kdata->value.i32; } } kstat_close(kc); } if (mhz > 0) return mhz * 1000.;#endif /* HAVE_LIBKSTAT */ return -1; // kstat stuff is not available, CPU freq is unknown}/* * Measure CPU freq using the pentium's time stamp counter register (TSC) */static double tsc_freq(){ 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(0x%x) => 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() => %d\n", result); return result;}static void* WINAPI expLocalHandle(void* v){ dbgprintf("LocalHandle(0x%x) => 0x%x\n", v, v); return v;}static void* WINAPI expGlobalHandle(void* v){ dbgprintf("GlobalHandle(0x%x) => 0x%x\n", v, v); return v;}static int WINAPI expGlobalUnlock(void* v){ dbgprintf("GlobalUnlock(0x%x) => 1\n", v); return 1;}static void* WINAPI expGlobalFree(void* v){ dbgprintf("GlobalFree(0x%x) => 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(0x%x, size %d, flags 0x%x) => 0x%x\n", v,size,flags,result); return result;}static int WINAPI expLocalUnlock(void* v){ dbgprintf("LocalUnlock(0x%x) => 1\n", v); return 1;}//static void* WINAPI expLocalFree(void* v){ dbgprintf("LocalFree(0x%x) => 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 0x%x(%s), type 0x%x(%s)) => 0x%x\n", module, name, HIWORD(name) ? name : "UNICODE", type, HIWORD(type) ? type : "UNICODE", result); return result;}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%x) => 0x%x\n", res, result); return result;}static int WINAPI expFreeResource(long res){ int result=FreeResource(res); dbgprintf("FreeResource(0x%x) => %d\n", res, result); return result;}//bool fun(HANDLE)//!0 on successstatic int WINAPI expCloseHandle(long v1){ dbgprintf("CloseHandle(0x%x) => 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", envs); return 0;}static void * WINAPI expRtlZeroMemory(void *p, size_t len){ void* result=memset(p,0,len); dbgprintf("RtlZeroMemory(0x%x, len %d) => 0x%x\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 0x%x, src 0x%x, len %d) => 0x%x\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(0x%x, char 0x%x, len %d) => 0x%x\n",p,ch,len,result); return result;}static int WINAPI expFreeEnvironmentStringsW(short* strings){ dbgprintf("FreeEnvironmentStringsW(0x%x) => 1\n", strings); return 1;}static int WINAPI expFreeEnvironmentStringsA(char* strings){ dbgprintf("FreeEnvironmentStringsA(0x%x) => 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() => 0x%x\n", ch_envs); return (LPCSTR)ch_envs; // dbgprintf("GetEnvironmentStrings() => 0\n"); // return 0;}static int WINAPI expGetStartupInfoA(STARTUPINFOA *s){ dbgprintf("GetStartupInfoA(0x%x) => 1\n"); 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=%d\n", s->cb); dbgprintf(" lpReserved='%s'\n", s->lpReserved); dbgprintf(" lpDesktop='%s'\n", s->lpDesktop); dbgprintf(" lpTitle='%s'\n", s->lpTitle); dbgprintf(" dwX=%d dwY=%d dwXSize=%d dwYSize=%d\n", s->dwX, s->dwY, s->dwXSize, s->dwYSize); dbgprintf(" dwXCountChars=%d dwYCountChars=%d dwFillAttribute=%d\n", s->dwXCountChars, s->dwYCountChars, s->dwFillAttribute); dbgprintf(" dwFlags=0x%x wShowWindow=0x%x cbReserved2=0x%x\n", s->dwFlags, s->wShowWindow, s->cbReserved2); dbgprintf(" lpReserved2=0x%x 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){ dbgprintf("GetStdHandle(0x%x) => 0x%x\n", z+0x1234); return z+0x1234;}#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;}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, 0x%x, %d) => %d\n", module, s, len, result); else dbgprintf("GetModuleFileNameA(0x%x, 0x%x, %d) => %d ( '%s' )\n", module, s, len, result, s); return result;}static int WINAPI expSetUnhandledExceptionFilter(void* filter){ dbgprintf("SetUnhandledExceptionFilter(0x%x) => 1\n", filter); return 1;//unsupported and probably won't ever be supported}static int WINAPI expLoadLibraryA(char* name){ int result = 0; char* lastbc; 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 if (strcasecmp(name, "comdlg32.dll") == 0 || strcasecmp(name, "comdlg32") == 0) return MODULE_HANDLE_comdlg32; if (strcasecmp(name, "msvcrt.dll") == 0 || strcasecmp(name, "msvcrt") == 0) return MODULE_HANDLE_msvcrt; if (strcasecmp(name, "ole32.dll") == 0 || strcasecmp(name, "ole32") == 0) return MODULE_HANDLE_ole32; if (strcasecmp(name, "winmm.dll") == 0 || strcasecmp(name, "winmm") == 0) return MODULE_HANDLE_winmm; result=LoadLibraryA(name); dbgprintf("Returned LoadLibraryA(0x%x='%s'), def_path=%s => 0x%x\n", name, name, 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 case MODULE_HANDLE_comdlg32: result=LookupExternalByName("comdlg32.dll", name); break; case MODULE_HANDLE_msvcrt: result=LookupExternalByName("msvcrt.dll", name); break; case MODULE_HANDLE_ole32: result=LookupExternalByName("ole32.dll", name); break; case MODULE_HANDLE_winmm: result=LookupExternalByName("winmm.dll", name); break; default: result=GetProcAddress(mod, name); } if((unsigned int)name > 0xffff) dbgprintf("GetProcAddress(0x%x, '%s') => 0x%x\n", mod, name, result); else dbgprintf("GetProcAddress(0x%x, '%d') => 0x%x\n", mod, (int)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 0x%x," "flProtect 0x%x, dwMaxHigh 0x%x, dwMaxLow 0x%x, name 0) => %d\n", hFile, lpAttr, flProtect, dwMaxHigh, dwMaxLow, result); else dbgprintf("CreateFileMappingA(file 0x%x, lpAttr 0x%x," "flProtect 0x%x, dwMaxHigh 0x%x, dwMaxLow 0x%x, name 0x%x='%s') => %d\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%x, 0x%x, 0) => %d\n", hFile, hz, result); else dbgprintf("OpenFileMappingA(0x%x, 0x%x, 0x%x='%s') => %d\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%x, 0x%x, 0x%x, size %d) => 0x%x\n", file,mode,offHigh,offLow,size,(char*)file+offLow); return (char*)file+offLow;}static void* WINAPI expUnmapViewOfFile(void* view){ dbgprintf("UnmapViewOfFile(0x%x) => 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(%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -