草庐IT

C++ 套接字 : Enabling Promiscuous Mode in Windows

我正在尝试修改我当前的套接字程序以捕获混杂的数据包。我目前所拥有的是能够正常抓包的。我已经看到关于如何在Linux上执行此操作的其他答案,但我需要找到一种在Windows上完成此操作的方法。这是我的代码:intmain(intargc,charconst*argv[]){SOCKETs;//Theboundsocketstructsockaddr_inserver;intrecv_len;//Sizeofreceiveddatacharudpbuf[BUFLEN];//Abufferfortheincomingdata.floatdata;//Thedatainthepacket//C

c - 为什么 Windows 要求导入 DLL 数据?

在Windows上,可以从DLL加载数据,但需要通过导入地址表中的指针进行间接访问。因此,编译器必须知道正在访问的对象是否是使用__declspec(dllimport)从DLL导入的。类型说明符。这很不幸,因为这意味着设计用作静态库或动态库的Windows库的header需要知道程序链接到哪个版本的库。此要求不适用于函数,这些函数是为DLL透明地模拟的,stub函数调用实际函数,其地址存储在导入地址表中。在Linux上,动态链接器(ld.so)将所有链接数据对象的值从共享对象复制到每个进程的私有(private)映射区域。这不需要间接寻址,因为私有(private)映射区域的地址是模

c++ - 如何在 C++ 任务管理器上更改进程的名称?

我有一个进程,名称为“processName”,可执行文件为“processName.exe”。我想启动这个进程并更改它在任务管理器中的显示方式的名称。我不能只重命名可执行文件,因为我想在名称中留出空间。例如,它在任务管理器中应该看起来像“ProcessNamesomethingelse”。我可以看到一些程序这样做,例如命令提示符可执行文件名称是“cmd.exe”,但命令提示符上的名称是“Windows命令处理器”,它的名称中有空格。 最佳答案 应用程序/任务名称是主窗口的标题(它自己的一章)。您可以使用SetWindowText更

c - Detecting if stdout is a console with MS Visual compilation, mingw64提供的console

我维护一个生成二进制数据的命令行实用程序。请求时,数据可以重定向到stdout。这在stdout被重定向到管道或文件时有效,但当stdout是一个控制台时,情况就不太一样了,因为它会垃圾控制台。为了保护用户免受此类错误,程序必须检测stdout是否是控制台,并在是时退出。现在,这并不是什么新鲜事,快速浏览一下Internet就会发现多种解决方案。主要缺点是没有“通用”方法,VisualStudio需要自己的风格。我用于Visual的控制台检测器有一个缺陷:它没有检测到stdout是一个控制台当控制台由mingw提供时,我认为这意味着它是mintty。这里是相关的代码部分:#ifdefi

c - 如何在 C 中的 DLL 中执行线程

我创建了一个运行3个工作线程的DLL,主线程处于循环中等待线程完成。线程已创建,但未执行线程。我尝试在使用CreateThread()创建的函数中设置MessageBox函数,但该框没有出现。我也尝试过调试,CreateThread()的返回值有效,因此线程被创建。BOOLWINAPIDllMain(){main();return1;}intmain(){HANDLEh1,h2,h3;h1=CreateThread(first)...h2=CreateThread(second)...h3=CreateThread(third)...WaitForSingleObject(h3,INF

c++ - 如何在任务计划程序中显示所有任务

我想使用COM库显示TaskScheduler下的所有任务。我尝试使用learn.microsoft.com上使用COM对象的程序。但是它没有显示所有60个任务,而是只显示12个任务//Getthepointertotheroottaskfolder.ITaskFolder*pRootFolder=NULL;hr=pService->GetFolder(_bstr_t(L"\\"),&pRootFolder);pService->Release();if(FAILED(hr)){printf("CannotgetRootFolderpointer:%x",hr);CoUninitial

c++ - 如何使用 C++ 检查任务调度程序中的任务触发器?

我想使用C++检查任务调度程序中任务的触发器。我想使用函数HRESULTget_Type(TASK_TRIGGER_TYPE2*pType);检查任务是登录还是开机触发。TASK_STATEtaskState;for(LONGi=0;iget_Item(_variant_t(i+1),&pRegisteredTask);if(SUCCEEDED(hr)){BSTRtaskName=NULL;TASK_TRIGGER_TYPE2*pType=NULL;hr=pRegisteredTask->get_Name(&taskName);if(SUCCEEDED(hr)){printf("\nT

c++ - DuplicateHandle() 是否进行任何进程间通信 (IPC),如果不进行,为什么要使用目标参数?

我正在寻找DuplicateHandle()非常困惑。第三个和第四个参数hTargetProcessHandle和lpTargetHandle似乎暗示这个API函数进行某种形式的进程间通信,但我在网上阅读的内容似乎暗示(没有直接说)实际上这个函数不能与外部的任何东西通信它自己的进程的地址空间,如果你真的想说将本地进程句柄复制到另一个进程,你必须自己手动完成。所以有人可以可怜我并明确地告诉我这个函数本身是否有任何IPC吗?另外,如果它不执行任何IPC,那么这两个参数的意义何在?如果没有发送数据并且此函数的输出对其他进程不可见,怎么会有“目标”?起初我以为我可以调用GetCurrentPr

windows - 我们不能将 abc.c 和 ABC.c 放在同一个文件夹中吗?有人可以解释一下原因吗

我正在尝试创建2个具有相似名称的c文件,但唯一的区别是大小写。一个是小写字母,另一个是大写字母,但我在Windows上一直出错 最佳答案 Windows文件系统不区分大小写,这意味着A.txt和a.txt表示相同的文件。但存储的文件名按原样存储,这意味着如果您将文件创建为A.txt,它会按原样显示,但您命名它的方式并不重要。您可以在某些Windows上更改此行为,但我不鼓励您这样做。 关于windows-我们不能将abc.c和ABC.c放在同一个文件夹中吗?有人可以解释一下原因吗,我们在

c - 句柄无效

尝试使用SetConsoleScreenBufferSize但失败并显示“句柄无效”。在最后一个错误。将发布所有代码,但这里有一些要点:使用它来调整缓冲区大小:intTGHandleResizeEvent(structTGHandle*tgHandle,INPUT_RECORDrecord){if(record.EventType==WINDOW_BUFFER_SIZE_EVENT){WINDOW_BUFFER_SIZE_RECORDsize=record.Event.WindowBufferSizeEvent;sizeTGDrawBuffer(&tgHandle->drawBuffe