精华内容
下载资源
问答
  • Windows进程句柄数限制

    万次阅读 2018-04-25 11:04:13
    设置GDIProcessHandleQuota项设置GDI句柄数量,默认值为2710(16进制)/10000(10进制),该值的允许范围为 256 ~ 16384 ,将其调整为大于默认的10000的值。如果您的系统配置了2G或更多内容,不妨将其设置为允许的最大值...

    设置

    1. GDIProcessHandleQuota项设置GDI句柄数量,默认值为2710(16进制)/10000(10进制),该值的允许范围为 256 ~ 16384 ,将其调整为大于默认的10000的值。如果您的系统配置了2G或更多内容,不妨将其设置为允许的最大值 16384(10进制);
    2. USERProcessHandleQuota项设置用户句柄数量,默认值同样为2710(16进制)/10000(10进制),该值的允许范围为 200 ~ 18000 ,将其调整为更多的数值。同样地,对于具有2GB或更多物理内存的系统,不妨将用户句柄数直接设置为上限 18000(10进制);
      感觉设置了没啥作用,多出了那一点句柄数起不了什么作用。
    展开全文
  • GDIProcessHandleQuota项设置GDI句柄数量,默认值为2710(16进制)/10000(10进制),该值的允许范围为 256 ~ 16384 ,如果系统配置的内存为2G或更多,不妨将其设置为允许的最大值 16384(10进制); ...

     

    设置

    1. GDIProcessHandleQuota项设置GDI句柄数量,默认值为2710(16进制)/10000(10进制),该值的允许范围为 256 ~ 16384 ,如果系统配置的内存为2G或更多,不妨将其设置为允许的最大值 16384(10进制);
    2. USERProcessHandleQuota项设置用户句柄数量,默认值为2710(16进制)/10000(10进制),该值的允许范围为 200 ~ 18000 ,对于具有2GB或更多物理内存的系统,不妨将用户句柄数直接设置为上限 18000(10进制);

     

    转载于:https://www.cnblogs.com/JuliaLiu/p/11237495.html

    展开全文
  • 使用API获取句柄数 function GetProcessHandleCount(PID: Cardinal): Cardinal; var hProcess: THandle; begin Result : = 0 ; if Assigned(_GetProcessHandleCount) then begin hProcess : = ...

    有两种方法。

    第一种:(此方法需要提升权限)

    type
      TGetProcessHandleCount = function (hProcess: THandle; var pdwHandleCount: DWORD): LongBool; stdcall;
    var
      _GetProcessHandleCount: TGetProcessHandleCount;
    
    // 获取API地址, 建议放在 initialization 段中
    _GetProcessHandleCount := GetProcAddress(GetModuleHandle(kernel32), 'GetProcessHandleCount');
    
    // 使用API获取句柄数
    function GetProcessHandleCount(PID: Cardinal): Cardinal;
    var
      hProcess: THandle;
    begin
      Result := 0;
      if Assigned(_GetProcessHandleCount) then begin
        hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
        if hProcess <> 0 then begin
          _GetProcessHandleCount(hProcess, Result);
          CloseHandle(hProcess);
        end;
      end;
    end;

     提升权限的代码:

    function EnablePrivilege(PrivName: string; bEnable: Boolean): Boolean;
    var
      TP: PTokenPrivileges;
      Dummy: Cardinal;
      hToken: THandle;
    begin
      Result := False;
      if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
      begin
        GetMem(TP, SizeOf(DWORD) + SizeOf(TLUIDAndAttributes));
        try
          TP.PrivilegeCount := 1;
          if LookupPrivilegeValue(nil, PChar(PrivName), TP.Privileges[0].Luid) then begin
            if bEnable then
              TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
            else
              TP.Privileges[0].Attributes := 0;
            Result := AdjustTokenPrivileges(hToken, False, TP^, SizeOf(TP), nil, Dummy);
          end else
            Result := False;
        finally
          FreeMem(TP);
          CloseHandle(hToken);
        end;
      end;
    end;
    EnablePrivilege('SeDebugPrivilege', True);  // 提升权限

     

    Minimum supported client

    Windows Vista, Windows XP with SP1 [desktop apps only]

    Minimum supported server

    Windows Server 2003 [desktop apps only]

     

     第二种: (直接查询信息,不需要提升权限)

    type
      TSystemHandleInformationsBuffer = packed record
        NumberOfHandles: LongWord;
        SystemHandleInformations: array[0..MAX_LENGTH-1] of TSystemHandleInformation;
      end;
    
    var
      FLocker: TCriticalSection;
      HandleInfoBuffer: Pointer;
      
    function GetProcessHandleCount(PID: Cardinal): Cardinal;
    var
      returnSize: Cardinal;
      p, p1: PAnsiChar;
    begin
      P := HandleInfoBuffer;
      FLocker.Enter;
      Result := NtQuerySystemInformation(Cardinal(SystemHandleInformation),
        P, SizeOf(TSystemHandleInformationsBuffer), returnSize);
      if Result = 0 then begin
        returnSize := PLongWord(P)^;
        Inc(P, 4);
        p1 := p + returnSize * SizeOf(TSystemHandleInformation);
        while(p < p1) do begin
          if (PSystemHandleInformation(P)^.ProcessId = PID) then
            Inc(Result);
          Inc(P, SizeOf(TSystemHandleInformation));
        end;
      end else
        Result := 0;   
      FLocker.Leave;
    end;

    相关声明

    type
      TNtQuerySystemInformation = function(infoClass: DWORD; buffer: Pointer; bufSize: DWORD;
        var returnSize: Dword): DWORD; stdcall;
      TNtQueryInformationProcess = function (ProcessHandle: Cardinal;
        ProcessInformationClass: PROCESSINFOCLASS; ProcessInformation: Pointer;
        ProcessInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall;
    
    var
      _NtQuerySystemInformation: TNtQuerySystemInformation;
      _NtQueryInformationProcess: TNtQueryInformationProcess;
    
    function NtQuerySystemInformation(infoClass: DWORD; buffer: Pointer; bufSize: DWORD;
      var returnSize: Dword): DWORD;
    begin
      if not Assigned(_NtQuerySystemInformation) then
        Result := 0
      else
        Result := _NtQuerySystemInformation(infoClass, buffer, bufSize, returnSize);
    end;
    
    function NtQueryInformationProcess(ProcessHandle: Cardinal;
        ProcessInformationClass: PROCESSINFOCLASS; ProcessInformation: Pointer;
        ProcessInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS;
    begin
      if not Assigned(_NtQueryInformationProcess) then
        Result := 0
      else
        Result := _NtQueryInformationProcess(ProcessHandle, ProcessInformationClass,
          ProcessInformation, ProcessInformationLength, ReturnLength);
    end;
    
    initialization
      FLocker := TCriticalSection.Create;
      HandleInfoBuffer := GetMemory(SizeOf(TSystemHandleInformationsBuffer));
      _NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'), 'NtQuerySystemInformation');
      _NtQueryInformationProcess := GetProcAddress(GetModuleHandle('ntdll.dll'), 'NtQueryInformationProcess');
    
    finalization
      FLocker.Free;
      FreeMemory(HandleInfoBuffer);

     

    转载于:https://www.cnblogs.com/yangyxd/articles/8889215.html

    展开全文
  • 我使用了一个股票网站服务器提供的API接口,向该网站API发送指令后,服务器会与我的电脑建立UDP连接,同时在...同时我也没在windows7的进程管理中找出是哪个进程在我的电脑里写入文件。 请问有什么办法能解决该问题?
  • 在linux系统中,进程打开的文件句柄数量的限制,可用ulimit命令来查看和修改,或者修改/etc/security/limits.conf也可以修改。但在windows中,目前没有找到方便的方法查看这个值。 下面这段代码可以用来查看该值,...

    在linux系统中,进程打开的文件句柄数量的限制,可用ulimit命令来查看和修改,或者修改/etc/security/limits.conf也可以修改。但在windows中,目前没有找到方便的方法查看这个值。

    下面这段代码可以用来查看该值,设置的办法还没有找到。

    Windows server 2003下面程序的值是509,加上标准I/O和标准错误文件句柄,系统这个值应该是512。其他的windows系统如果需要可以用跑一下下面的代码试一下。

     

    int _tmain(int argc, _TCHAR* argv[])

    {

         FILE   *p;

        p=fopen("E:\\first.txt","rb");

         if(p==NULL)

        {

            printf("\nerror on open E:\\first.txt file!");

        }

     

        int i = 1;

        while(p!=NULL)

        {

            p=fopen( "E:\\first.txt", "rb");

             printf("%d\n",i);

             i++;

        }

         return 0;

    }


    展开全文
  • 紧接上文,接下来就是获取进程的句柄数,句柄就是windows进程中各种对象的标识,一般应用程序会通过句柄来执行各种操作,通过监控设备的句柄,我们可以大致判断出进程是否存在异常,比如句柄泄漏,会导致系统卡顿,...
  • Windows关于文件句柄数的限制

    千次阅读 2019-07-26 01:29:38
    Windows对一个进程打开的文件句柄数量限制一般为512,可以通过_setmaxstdio()来修改,_getmaxstdio()来获取。 1 #include <stdio.h> 2 3 int main() 4 { 5 _setmaxstdio(100); 6 _getmaxstdio();//...
  • windows进程能打开的最大句柄数目

    千次阅读 2013-02-20 15:21:20
    最近一个服务程序在长时间运行中句柄不断上涨,最高达到...下面是关于进程句柄的一些细节。 1:一个windows进程最多有1600万个句柄,这是理论上的; 2:句柄表是从系统的换页内存池中分配的,所以在未达到1600万的
  • 转自:... Windows下,默认值是512。但是可以改: /** * get and set the max handlers of opening files */ void testMaxHandlersOfFiles() {  printf( "maxstdio: %
  • Windows句柄表格式

    2019-05-23 22:17:27
    原文发表于百度空间,2009-02-28 句柄是Windows对象管理中引入的一个东西,它的实际意义是对象在句柄表中...通常情况下每个进程的句柄表都是一级表,当句柄数超过一级表的容量时,就会扩展为二级表,此时二级表中放...
  • 摘要:VC/C++源码,系统相关,进程管理器 本例将学习Windows系统进程管理器的开发,获取Windows进程:VC++进程管理器,通过设置List控件的表格扩展属性,可以显示进程映像名称、进程开启的线程、PID、优先级;...
  • windows进程监控

    千次阅读 2018-06-12 17:36:28
    最近开发一个进程监控的服务,由于对windows api不熟,所以折腾了小两周才完全跑通,特记录一下1 由于需求需要根据进程名来进行监控,所以首先要根据进程名来获取进程句柄(同名进程可能有多个,比如,起了多个...
  • 由于windows并没有给出枚举所有句柄所用到的API,和进程所拥有的句柄相关的只有GetProcessHandleCount这个函数,然而这个函数只能获取到和进程相关的句柄数,不能获取到实际的句柄,要获得句柄,我们必须使用未公开...
  • Windows进程的内存占用以及CPU占用

    千次阅读 2019-03-05 10:04:02
    Windows进程的内存占用以及CPU占用 2016年05月25日 19:09:52chen_aotian阅读:3988 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chen_aotian/article/details/51500898 在...
  • 一台windows 2003的服务器(2G内存),刚刚启起时占用内存:600M左右。 运行20天后,内存占用(PF使用):1.8G 其实物理内存使用情况在这20天来并没有太大的变化,但虚拟内存占用明显在不停的增加。 我通过“任务...
  • 这一次,我将讨论Windows上支持的最大线程进程数限制。我将简要介绍一下线程和进程之间的区别,调查线程限制,然后调查进程限制。我首先介绍了线程的限制,因为每个活动进程至少有一个线程(一个进程已经终止,...
  • 句柄

    2019-09-03 23:20:24
    进程句柄表 在Win32编程中,有一个数据类型为HANDLE,其值一般为一个不大的数字,可以简单的理解为一个指针数组的索引,里面的指针指向内核对象,这仅仅是粗浅的理解,接下来我们要进行深入。 首先,为什么要这样...
  • HANDLEhProcess,//待读进程句柄 LPCVOIDlpBaseAddress,//目标进程中待读内存的起始地址 LPVOIDlpBuffer,//用来接受读取数据的缓冲区 DWORDnSize,//要读取的字节 LPDWORDlpNumberOfBytesRead...
  • Linux文件句柄泄漏

    2020-09-11 20:49:17
    本文主要介绍Linux下如何查看和修改进程打开的文件句柄数,避免这类问题的发生。 句柄介绍 句柄的介绍及应用 句柄是在 Windows 中引入的一个概念,它是和对象一一对应的 32 位无符号整数值。句柄可以映射到唯一的...
  • 检查调试句柄泄漏

    千次阅读 2016-05-04 15:58:25
    Windows任务管理查看句柄数 任务管理–>查看–>选择列–>勾选“句柄数” process explorer查看句柄详细信息 process explorer 中双击指定进程打开进程的properties窗口,切换到performance标签页,可以看到...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 174
精华内容 69
关键字:

windows进程句柄数