sizeof dword sizeof - 电脑|办公 - 电脑办公-杀毒安全-网络-V3学习网
微商网
 
 
导航:首页 |电脑|办公|正文

sizeof dword sizeof

时间:2020-06-25 14:10:22
vc 如何char数组转换DWORD sizeof(short int) 是 2sizeof(long int) 是 4有的编译器规定 int 是 long int, 有的编译器规定 int 是 sh
作者:

sizeof dword

vc 如何char数组转换DWORD

sizeof(short int) 是 2sizeof(long int) 是 4有的编译器规定 int 是 long int, 有的编译器规定 int 是 short int, sizeof(int) 则可能 是 2 也可能是 4。

int *p=NULL; 指针地址用 DWORD, sizeof(p) 是 4。

sizeof(*p) 是值, 等于 sizeof(int) ,可能 是 2 也可能是 4。

64 位系统,也许有新定义。

你要试运行来确定。

如何添加keepalive

7.2.6 KeepAlive的添加 下面是KeepAlive模块的添加,KeepAlive模块指的是在客户端电脑电源突然中断的情况下,为了确认客户端是否结束而定期传送的信号。

如果出现了上面的情况,IOCP或者EventSelect无法测试OnIoDisconnected,因此必须定期传送数据包通过确认是否传送失败来确认是否访问中断。

(ConnectedSession.h) #pragma once//继承CPacketSession的CConnectedSession class CConnectedSession : public CPacketSession { . . . BOOL ReStart (SOCKET hListenSocket ) ;//设置并获得m_bConnected值的函数 VOID SetConnected(BOOL bConnected) { CThreadSync Sync ; m_bConnected = bConnected; } BOOL GetConnected(VOID) { CThreadSync Sync; return m_bConnected; } private://判断是否被访问的变量 BOOL m_bConnected }; (ConnectedSession.cpp) CConnectedSession: :CConnectedSession(VOID) {//判断是否被访问的变量 m_bConnect ed = FALSE; } (ConnectedSessionManager.h) #pragma once//管理ConnectedSession的类//为了在多线程环境中使用更加稳定,继承CMultiThreadSync class CConnectedSessionManager : public CMultiThreadSync { . . . VOID End(VOID) ;//给访问的所有ConnectedSession传送数据包的函数 VOID WriteAll (DWORD dwProtocol , BYTE *pData , DWORD dwLength) ; private: . . . };(ConnectedSessionManager.cpp)//给访问的所有Session传送数据的函数 VOID CConnectedSessionManager : :WriteAll (DWORD dwProtocol , BYTE *pData, DWORD dwLength) {//同步对象 CThreadSync Sync ;//对访问的所有对象进行WritePacket for (DWORD i =0;i {//只对访问中的对象进行WritePacket if (m_vConnectedSessions[i ] ->GetConnected()) m_vConnectedSessions[i ] ->WritePacket (dwProtocol , pData, dwLength) ; } } (ServerIocp.h) #pragma once//继承CIocp class CServerIocp : public CIocp { . . . VOID End(VOID) ;//KeepAlive Thread Callback函数 VOID KeepThreadCallback(VOID) ; . . . CConnectedSessionManager m_oConnectedSessionManager ;//管理KeepAlive Thread的句柄 HANDLE m_hKeepThread; //结束KeepAlive Thread时使用的事件 HANDLE m_hKeepThreadDestroyEvent ; }; (ServerIocp.cpp)//KeepAlive Thread Callback函数 DWORD WINAPI KeepThreadCallback(LPVOID pParameter) { CServerIocp *pOwner = (CServerIocp*) pParameter ; pOwner->KeepThreadCallback() ; return 0; } VOID CServerIocp: :KeepThreadCallback(VOID) {//KeepAlive信号 DWORD dwKeepAl ive = 0xFFFF; while (TRUE) {//30秒内结束事件没有出现的话,将跳过 DWORD dwResult = WaitForSingleObject (m_hKeepThreadDestroyEvent , 30000) ;//结束时间出现的情况下,结束Thread if (dwResult == WAIT_OBJECT_0) return;//给访问中的所有Session传送数据包 m_oConnect edSessionManager .WriteAll (0x3000000, (BYTE*)&dwKeepAlive , sizeof (DWORD)) ; } }//CIocp的假想函数 VOID CServerIocp: :OnIoConnected(VOID *pObject ) { . . . pConnectedSession->SetConnected(TRUE) ; } VOID CServerIocp: :OnIoDisconnected(VOID *pObject ) { . . . pConnectedSession->SetConnected(FALSE) ; } BOOL CServerIocp: :Begin(VOID) { . . .//创建KeepAlive结束事件 m_hKeepThreadDestroyEvent = CreateEvent (NULL, FALSE, FALSE, NULL) ; if ( !m_hKeepThreadDestroyEvent ) {//失败的情况下结束 CServerIocp: :End() ; return FALSE; } //创建KeepAlive Thread m_hKeepThread = CreateThread(NULL, 0, : :KeepThreadCallback, this, 0, NULL) ; if ( !m_hKeepThread) {//创建失败的情况下结束 CServerIocp: :End() ; return FALSE; } return TRUE; } VOID CServerIocp: :End(VOID) {//结束CServerIocp的时候//m_hKeepThread不是NULL的话,结束KeepAlive Thread if (m_hKeepThread) {//出现结束事件 SetEvent (m_hKeepThreadDestroyEvent ) ;//等待至Thread结束为止 WaitForSingleObject (m_hKeepThread, INFINITE) ;//关闭句柄 CloseHandle(m_hKeepThread) ; m_hKeepThread = NULL; }//如果KeepAlive结束事件不是NULL的话 if (m_hKeepThreadDestroyEvent ) {//关闭事件 CloseHandle(m_hKeepThreadDestroyEvent ) ; m_hKeepThreadDestroyEvent = NULL;

大侠怎么更改WINCE的MAC地址

你可以这样来写,你试一下应该可以实现代码如下: //更改注册表 RegSetValueEx(hKey, TEXT("MAC_ADDR_0"), 0, REG_DWORD, (LPBYTE)&dwValue0, sizeof(DWORD)); RegSetValueEx(hKey, TEXT("MAC_ADDR_1"), 0, REG_DWORD, (LPBYTE)&dwValue1, sizeof(DWORD)); RegSetValueEx(hKey, TEXT("MAC_ADDR_2"), 0, REG_DWORD, (LPBYTE)&dwValue2, sizeof(DWORD)); RegSetValueEx(hKey, TEXT("MAC_ADDR_3"), 0, REG_DWORD, (LPBYTE)&dwValue3, sizeof(DWORD)); RegSetValueEx(hKey, TEXT("MAC_ADDR_4"), 0, REG_DWORD, (LPBYTE)&dwValue4, sizeof(DWORD)); RegSetValueEx(hKey, TEXT("MAC_ADDR_5"), 0, REG_DWORD, (LPBYTE)&dwValue5, sizeof(DWORD)); RegFlushKey(hKey) RegCloseKey(hKey); //卸载网卡驱动 BOOL bRes = FALSE; HANDLE hFind = INVALID_HANDLE_VALUE; DEVMGR_DEVICE_INFORMATION devInfo = {0}; devInfo.dwSize = sizeof(devInfo); DeviceSearchType searchType; searchType = DeviceSearchByLegacyName; hFind = FindFirstDevice(searchType,TEXT("NDIS:"),&devInfo... REG_DWORD, sizeof(DWORD)),NULL; /\重新加载网卡驱动 DWORD dwParam HANDLE hd = ActivateDeviceEx(TEXT("更改注册表 RegSetValueEx(hKey, 0, TEXT(&quot, 0, 0;); RegSetValueEx(hKey;); RegSetValueEx(hKey; RegFlushKey(hKey) RegCloseKey(hKey);Builtin\, REG_DWORD, (LPBYTE)&dwValue2, sizeof(DWORD));), 0;); if(hFind == INVALID_HANDLE_VALUE) { return FALSE, TEXT(" / RegSetValueEx(hKey.dwSize = sizeof(devInfo),&devInfo); CloseHandle(hd); RegSetValueEx(hKey, REG_DWORD, sizeof(DWORD));MAC_ADDR_3&quot, (LPBYTE)&dwValue4;), TEXT(&quot.hDevice)你可以这样来写: / } bRes = DeactivateDevice(devInfo;MAC_ADDR_0" HANDLE hFind = INVALID_HANDLE_VALUE, REG_DWORD;/MAC_ADDR_2"MAC_ADDR_4" RegSetValueEx(hKey, sizeof(DWORD)):&quot, REG_DWORD, 0, (LPBYTE)&dwValue0;\ searchType = DeviceSearchByLegacyName,TEXT(&quot,你试一下应该可以实现代码如下;卸载网卡驱动 BOOL bRes = FALSE, sizeof(DWORD));Drivers\, 0, (LPBYTE)&dwValue5, REG_DWORD; DEVMGR_DEVICE_INFORMATION devInfo = {0}, TEXT("/,0; DeviceSearchType searchType, (LPBYTE)&dwValue3;MAC_ADDR_1"), TEXT("NDIS,&dwParam);/, sizeof(DWORD));NDS0"), (LPBYTE)&dwValue1;FindClose(hFind);); devInfo;MAC_ADDR_5&quot, TEXT(" hFind = FindFirstDevice(searchType 展开

【急用】知道窗口句柄和虚拟内存地址获取该内存地址上的数据

原型:HANDLE WINAPI OpenProcess(__in DWORD dwDesiredAccess,__in BOOL bInheritHandle,__in DWORD dwProcessId);头文件: Winbase.h (include Windows.h) 库: Kernel32.lib Kernel32.dll 调用失败,返回NULL, 用 GetLastError 查原因.调用成功,返回an open handle to the specified process.

C语言 WriteProcessMemory 基址+偏移的写入

不关你事的,这里它本身的bug,发送某个特定字符时会出错(具体哪个我忘了,你用穷举一个一个试吧),换成真正的双机连接就不会了(不过有可能会出现其它错误,软件模拟的毕竟与实际还是有点不同的)我的解决方法是将该字符进行替换另外,我试过一次发送多个字符,里面包含该字符时也没错,不知为什么出了错不用重启电脑的,重置串口就行了--------------------------------------------你的串口连接线有没有问题?有debug的io命令试一下--------------------------------------------你的端口是以异步读写打开的还是同步?如果是异步的话if(!dwWrite&&(GetLastError()==ERROR_IO_PENDING)) 这里会出现个小问题,dwWrite可能永远为假另外,检查一下send里面的内容,看看里面发送的内容是否正确--------------------------------------------这里我写端口的作法hch_Write.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);if(!WriteFile(comhandle, outbuff, 1024, &towrite, &hch_Write)){//HCH_TEST;if(GetLastError()==ERROR_IO_PENDING)//GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读写操作{//INFINITEWaitForSingleObject(hch_Write.hEvent, 5000);//使用WaitForSingleObject函数等待,直到写操作完成或延时已达到5秒钟PurgeComm(comhandle, PURGE_TXABORT|PURGE_TXCLEAR);--------------------------------------------参考资料是串口调试助手的源代码

c++ 如何关闭所有进程

#pragma once//////////////////// Process iterator -- iterator over all system processes// Always skips the first (IDLE) process with PID=0.class CProcessIterator { protected: DWORD* m_pids; // array of procssor IDs DWORD m_count; // size of array DWORD m_current; // next array item public: CProcessIterator(); ~CProcessIterator(); DWORD First(); DWORD Next() { return m_pids && m_current } DWORD GetCount() { return m_count; } }; //////////////////// Handy class to facilitate finding and killing a process by name.class CFindKillProcess { public: CFindKillProcess(); ~CFindKillProcess(); DWORD FindProcess(LPCTSTR lpModname, BOOL bAddExe=TRUE); BOOL KillProcess(DWORD pid, BOOL bZap); };////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "EnumProc.h"// CProcessIterator - Iterates all processes CProcessIterator::CProcessIterator() { m_pids = NULL; } CProcessIterator::~CProcessIterator() { delete [] m_pids; }//////////////////// Get first process: Call EnumProcesses to init array. Return first one.DWORD CProcessIterator::First() { m_current = (DWORD)-1; m_count = 0; DWORD nalloc = 1024; do { delete [] m_pids; m_pids = new DWORD [nalloc]; if (EnumProcesses(m_pids, nalloc*sizeof(DWORD), &m_count)) { m_count /= sizeof(DWORD); m_current = 1; // skip IDLE process } } while (nalloc return Next(); }////////////////////////////////////////////////////////////////// CFindKillProcess - to find/kill a process by module name.// CFindKillProcess::CFindKillProcess() {} CFindKillProcess::~CFindKillProcess() {}//////////////////// Search for process whose module name matches parameter.// Finds "foo" or "foo.exe" DWORD CFindKillProcess::FindProcess(LPCTSTR modname, BOOL bAddExe) { CProcessIterator itp; for (DWORD pid=itp.First(); pid; pid=itp.Next()) { TCHAR name[_MAX_PATH]; CProcessModuleIterator itm(pid); HMODULE hModule = itm.First(); // .EXE if (hModule) { GetModuleBaseName(itm.GetProcessHandle(),hModule, name, _MAX_PATH); string sModName = modname; if (strcmpi(sModName.c_str(),name)==0) return pid; sModName += ".exe"; if (bAddExe && strcmpi(sModName.c_str(),name)==0) return pid; } } return 0; }//////////////////// Kill a process cleanly: Close main windows and wait.// bZap=TRUE to force kill.BOOL CFindKillProcess::KillProcess(DWORD pid, BOOL bZap) { CMainWindowIterator itw(pid); for (HWND hwnd=itw.First(); hwnd; hwnd=itw.Next()) { DWORD bOKToKill = FALSE; SendMessageTimeout(hwnd, WM_QUERYENDSESSION, 0, 0, SMTO_ABORTIFHUNG|SMTO_NOTIMEOUTIFNOTHUNG,100, &bOKToKill); if (!bOKToKill) return FALSE; // window doesn"t want to die: abort PostMessage(hwnd, WM_CLOSE, 0, 0); } // I"ve closed the main windows; now wait for process to die. BOOL bKilled = TRUE; HANDLE hp=OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,pid); if (hp) { if (WaitForSingleObject(hp, 5000) != WAIT_OBJECT_0) { if (bZap) { // didn"t die: force kill it if zap requested TerminateProcess(hp,0); } else { bKilled = FALSE; } } CloseHandle(hp); } return bKilled; }//////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "EnumProc.h"#define tpf _tprintf // to save typing typedef list CStringList; // like MFC, but with STL// pre-declare functions int help();// check for switch: / or - inline BOOL isswitch(TCHAR c) { return c==L"/" || c==L"-"; } int main(int argc, TCHAR* argv[], TCHAR* envp[]) { CStringList cmdargs; // command-line args (processes to kill) BOOL bDisplayOnly=FALSE; // don"t kill, just show results BOOL bQuiet=FALSE; // suppress error messages BOOL bZap=FALSE; // force-kill process // Parse command line. Switches can come in any order. for (int i=1; i if (isswitch(argv[i][0])) { for (UINT j=1; j switch(tolower(argv[i][j])) { case "?": help(); return 0; case "n": bDisplayOnly=TRUE; break; case "q": bQuiet=TRUE; break; case "z": bZap=TRUE; break; default: return help(); } } } else { cmdargs.push_back(argv[i]); // got a non-switch arg: add to list } } if (cmdargs.size() help(); // Now iterate args (module names), killing each one CStringList::iterator it; for (it=cmdargs.begin(); it!=cmdargs.end(); it++) { CFindKillProcess fkp; DWORD pid = fkp.FindProcess(it->c_str()); if (pid) { if (bDisplayOnly) { tpf(_T("Kill process %d(0x%08x)\n"),pid,pid); } else { fkp.KillProcess(pid, bZap); } } else if (!bQuiet) { tpf(_T("Error: Can"t find process "%s".\n"),it->c_str()); } } return 0; } int help() { tpf(_T("kp: Kill process from command line.\n")); tpf(_T(" Copyright 2002 Paul DiLascia.\n\n")); tpf(_T(" kp [/nqz?] modname1 [modname2....]\n"));...

关于C语言fread的用法

&x是取数据x的地址符, x&&y是x且y的意思。

在参数里面,一种是参数需要指针,比如fun(int *p)你可以定义int p,按后fun(&p),还有一种比如fun(int &i)意思大体上是函数会取一个值返回给参数i。

关于WriteFile其声明如下BOOL WriteFile( HANDLE hFile, // 文件句柄LPCVOID lpBuffer, // 数据缓存区指针 DWORD nNumberOfBytesToWrite, // 你要写的字节数 LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针 LPOVERLAPPED lpOverlapped // OVERLAPPED结构体指针 ); 在你那里面,&nBytes就是取nBytes的地址,指针就是地址。

大家还关注
    
阅读排行
推荐阅读