精华内容
下载资源
问答
  • 对象句柄

    2011-11-17 22:40:50
    调用函数创建内核对象时,函数会返回标识此内核对象句柄。 可以想想此句柄是一个能够被进程中任何线程使用的一个不“透明” 的值,许多API函数需要使用他作为参数,以便知道系统知道要操作哪一个内核对象。   ...

    内核对象的数据结构仅能从内核模式访问,所以直接在内存中定位这些数据结构对应用程序来说是不可能的

     应用程序必须使用API函数访问内核对象。

     

    调用函数创建内核对象时,函数会返回标识此内核对象的句柄。

    可以想想此句柄是一个能够被进程中任何线程使用的一个不“透明” 的值,许多API函数需要使用他作为参数,以便知道系统知道要操作哪一个内核对象。

     

    为了使系统稳定,这些句柄是进程相关的,也就是仅对创建该内核对象的进程有效。如果将一个句柄值通过某种机制传给其他进程中的线程,那么,该线程以此句柄为参数调用相关函数时就会失效

     

     

    当然,多个进程共享一个内核对象也是可能的,调用duplicateHandle函数复制一个进程句柄传给其他进程即可

    展开全文
  • 易语言枚举内核对象句柄源码,枚举内核对象句柄,枚举系统句柄,CloseRemoteHandle,结束内核对象句柄,测试线程,CompareFunc3,RtlMoveMemory1,CopyMemory_SYSTEM_PROCESSES,ZwQueryInformationProcess,...
  • 易语言枚举内核对象句柄源码
  • 一、对象句柄值获取、 1、句柄值、 2、创建对象时获取句柄值、 3、函数获取句柄值、 4、获取 / 设置 对象属性、 二、获取对象属性、 1、获取 线 对象属性、 2、获取 坐标轴 对象属性、





    一、对象句柄值获取





    1、句柄值


    对象的句柄值 , 类似于编程时的引用 , 将对象的句柄值赋值给变量后 , 该变量就可以代表指定的绘图对象 ;

    对象的 Handle 标识 ;



    2、创建对象时获取句柄值


    创建对象时获取图形对象句柄值 : 创建对象时 , 使用变量接收该对象 , 下面的代码就是使用 line_sin 变量获取 线 对象的句柄值 ;

    line_sin = plot(x, y)
    


    3、函数获取句柄值


    使用函数获取对象句柄值 : 下面的函数是获取相关对象句柄值的函数 ;

    gca : 获取当前坐标轴的句柄值 ;

    gcf : 获取当前图形的句柄值 ;

    allchild : 查找特定对象的所有子对象的句柄 ;

    ancestor : 查找特定对象的父容器的句柄值 ;

    delete : 删除对象 ;

    findall : 找到所有的图形对象 ;



    4、获取 / 设置 对象属性


    获取某个对象的属性 : 使用 get 函数 , 可以获取某个对象的属性 ;

    get()
    

    设置某个对象的属性 : 使用 set 函数 , 可以设置某个对象的属性 ;

    set()
    




    二、获取对象属性





    1、获取 线 对象属性


    获取图形对象属性 :

    代码示例 :

    % x 轴变量
    %0 ~ 2pi 之间产生 1000 个数值
    x = linspace(0, 2 * pi, 1000);
    
    % y 轴变量
    y = sin(x);
    
    % 使用 h 变量接受 plot 函数绘制的曲线图像句柄值
    h = plot(x, y);
    
    % 获取曲线图像的属性
    get(h)
    

    绘制的曲线 :

    在这里插入图片描述


    命令行窗口打印的内容 : 获取的 h 变量 , 即 plot 函数绘制的曲线对象的各个属性 ;

    • Color : 颜色值
    • LineWidth : 线的粗细 , 线宽
    >> Untitled2
        AlignVertexCenters: 'off'
                Annotation: [1×1 matlab.graphics.eventdata.Annotation]
              BeingDeleted: 'off'
                BusyAction: 'queue'
             ButtonDownFcn: ''
                  Children: [0×0 GraphicsPlaceholder]
                  Clipping: 'on'
                     Color: [0 0.4470 0.7410]
                 CreateFcn: ''
                 DeleteFcn: ''
               DisplayName: ''
          HandleVisibility: 'on'
                   HitTest: 'on'
             Interruptible: 'on'
                  LineJoin: 'round'
                 LineStyle: '-'
                 LineWidth: 0.5000
                    Marker: 'none'
           MarkerEdgeColor: 'auto'
           MarkerFaceColor: 'none'
             MarkerIndices: [1×1000 uint64]
                MarkerSize: 6
                    Parent: [1×1 Axes]
             PickableParts: 'visible'
                  Selected: 'off'
        SelectionHighlight: 'on'
                       Tag: ''
                      Type: 'line'
             UIContextMenu: [0×0 GraphicsPlaceholder]
                  UserData: []
                   Visible: 'on'
                     XData: [1×1000 double]
                 XDataMode: 'manual'
               XDataSource: ''
                     YData: [1×1000 double]
               YDataSource: ''
                     ZData: [1×0 double]
               ZDataSource: ''
    
    >> 
    


    2、获取 坐标轴 对象属性


    使用 get(gca) 可以获取当前坐标轴对象的属性 ;


    代码示例 :

    % x 轴变量
    %0 ~ 2pi 之间产生 1000 个数值
    x = linspace(0, 2 * pi, 1000);
    
    % y 轴变量
    y = sin(x);
    
    % 使用 h 变量接受 plot 函数绘制的曲线图像句柄值
    h = plot(x, y);
    
    % 获取曲线图像的属性
    %get(h)
    
    % 获取坐标轴对象属性
    get(gca)
    

    绘制结果 :

    在这里插入图片描述


    命令行窗口输出结果 : 其中 XLim: [0 7] 表示 xx 轴取值范围是 00 ~ 77 ;

    >> Untitled2
                           ALim: [0 1]
                       ALimMode: 'auto'
         ActivePositionProperty: 'outerposition'
              AmbientLightColor: [1 1 1]
                   BeingDeleted: 'off'
                            Box: 'on'
                       BoxStyle: 'back'
                     BusyAction: 'queue'
                  ButtonDownFcn: ''
                           CLim: [0 1]
                       CLimMode: 'auto'
                 CameraPosition: [3.5000 0 17.3205]
             CameraPositionMode: 'auto'
                   CameraTarget: [3.5000 0 0]
               CameraTargetMode: 'auto'
                 CameraUpVector: [0 1 0]
             CameraUpVectorMode: 'auto'
                CameraViewAngle: 6.6086
            CameraViewAngleMode: 'auto'
                       Children: [1×1 Line]
                       Clipping: 'on'
                  ClippingStyle: '3dbox'
                          Color: [1 1 1]
                     ColorOrder: [7×3 double]
                ColorOrderIndex: 2
                      CreateFcn: ''
                   CurrentPoint: [2×3 double]
                DataAspectRatio: [3.5000 1 1]
            DataAspectRatioMode: 'auto'
                      DeleteFcn: ''
                      FontAngle: 'normal'
                       FontName: 'Helvetica'
                       FontSize: 10
                  FontSmoothing: 'on'
                      FontUnits: 'points'
                     FontWeight: 'normal'
                      GridAlpha: 0.1500
                  GridAlphaMode: 'auto'
                      GridColor: [0.1500 0.1500 0.1500]
                  GridColorMode: 'auto'
                  GridLineStyle: '-'
               HandleVisibility: 'on'
                        HitTest: 'on'
                  Interruptible: 'on'
        LabelFontSizeMultiplier: 1.1000
                          Layer: 'bottom'
                         Legend: [0×0 GraphicsPlaceholder]
                 LineStyleOrder: '-'
            LineStyleOrderIndex: 1
                      LineWidth: 0.5000
                 MinorGridAlpha: 0.2500
             MinorGridAlphaMode: 'auto'
                 MinorGridColor: [0.1000 0.1000 0.1000]
             MinorGridColorMode: 'auto'
             MinorGridLineStyle: ':'
                       NextPlot: 'replace'
                  OuterPosition: [0 0 1 1]
                         Parent: [1×1 Figure]
                  PickableParts: 'visible'
             PlotBoxAspectRatio: [1 0.7903 0.7903]
         PlotBoxAspectRatioMode: 'auto'
                       Position: [0.1300 0.1100 0.7750 0.8150]
                     Projection: 'orthographic'
                       Selected: 'off'
             SelectionHighlight: 'on'
                     SortMethod: 'childorder'
                            Tag: ''
                        TickDir: 'in'
                    TickDirMode: 'auto'
           TickLabelInterpreter: 'tex'
                     TickLength: [0.0100 0.0250]
                     TightInset: [0.0506 0.0532 0.0071 0.0202]
                          Title: [1×1 Text]
        TitleFontSizeMultiplier: 1.1000
                TitleFontWeight: 'normal'
                           Type: 'axes'
                  UIContextMenu: [0×0 GraphicsPlaceholder]
                          Units: 'normalized'
                       UserData: []
                           View: [0 90]
                        Visible: 'on'
                          XAxis: [1×1 NumericRuler]
                  XAxisLocation: 'bottom'
                         XColor: [0.1500 0.1500 0.1500]
                     XColorMode: 'auto'
                           XDir: 'normal'
                          XGrid: 'off'
                         XLabel: [1×1 Text]
                           XLim: [0 7]
                       XLimMode: 'auto'
                     XMinorGrid: 'off'
                     XMinorTick: 'off'
                         XScale: 'linear'
                          XTick: [0 1 2 3 4 5 6 7]
                     XTickLabel: {8×1 cell}
                 XTickLabelMode: 'auto'
             XTickLabelRotation: 0
                      XTickMode: 'auto'
                          YAxis: [1×1 NumericRuler]
                  YAxisLocation: 'left'
                         YColor: [0.1500 0.1500 0.1500]
                     YColorMode: 'auto'
                           YDir: 'normal'
                          YGrid: 'off'
                         YLabel: [1×1 Text]
                           YLim: [-1 1]
                       YLimMode: 'auto'
                     YMinorGrid: 'off'
                     YMinorTick: 'off'
                         YScale: 'linear'
                          YTick: [-1 -0.8000 -0.6000 -0.4000 -0.2000 0 0.2000 0.4000 0.6000 0.8000 1]
                     YTickLabel: {11×1 cell}
                 YTickLabelMode: 'auto'
             YTickLabelRotation: 0
                      YTickMode: 'auto'
                          ZAxis: [1×1 NumericRuler]
                         ZColor: [0.1500 0.1500 0.1500]
                     ZColorMode: 'auto'
                           ZDir: 'normal'
                          ZGrid: 'off'
                         ZLabel: [1×1 Text]
                           ZLim: [-1 1]
                       ZLimMode: 'auto'
                     ZMinorGrid: 'off'
                     ZMinorTick: 'off'
                         ZScale: 'linear'
                          ZTick: [-1 0 1]
                     ZTickLabel: ''
                 ZTickLabelMode: 'auto'
             ZTickLabelRotation: 0
                      ZTickMode: 'auto'
    
    >> 
    
    展开全文
  • 枚举内核对象句柄-易语言
  • 内核对象句柄

    2019-06-28 23:34:36
    1、内核对象句柄表: 索引 指向内核对象内存块的指针 访问掩码 标志 1 0xF0000000 0x??????? 0x0000000 2、索引值。内核对象的句柄的是HANDLE值(先将HANDLE右移两位,移掉访问掩码和标志...

    1、内核对象句柄表:

    索引 指向内核对象内存块的指针 访问掩码 标志
    1 0xF0000000 0x??????? 0x0000000

    2、索引值。内核对象的句柄的是HANDLE值(先将HANDLE右移两位,移掉访问掩码和标志就是索引值了)。

    3、指向内核对象的指针。这个值是内核对象的数据结构的指针,存在于内核区间。

    4、标志。表示这个内核对象是否可以继承。

     

    转载于:https://www.cnblogs.com/wang-can/p/3330770.html

    展开全文
  • 易语言源码易语言枚举内核对象句柄源码.rar
  • 可视对象句柄查看器VisualViewer.rar可视对象句柄查看器VisualViewer.rar可视对象句柄查看器VisualViewer.rar可视对象句柄查看器VisualViewer.rar
  • 1. 内核对象句柄继承 2. 为内核对象命名 3. 复制内核对象句柄 今天写一下第三种方式。 跨进程边界共享内核对象可以使用DuplicateHandle函数来实现,这个函数会获取某一进程的句柄表中的一个记录项,然后在另...

    进程共享内核对象的三种方式:

    1.     内核对象句柄继承

    2.     为内核对象命名

    3.     复制内核对象句柄

    今天写一下第三种方式。

    跨进程边界共享内核对象可以使用DuplicateHandle函数来实现,这个函数会获取某一进程的句柄表中的一个记录项,然后在另一个进程的句柄表中创建这个记录项的一个副本,于是该进程也拥有了该内核对象的访问权。

    函数原型如下:

    DuplicateHandle(
        _In_ HANDLE hSourceProcessHandle,
        _In_ HANDLE hSourceHandle,
        _In_ HANDLE hTargetProcessHandle,
        _Outptr_ LPHANDLE lpTargetHandle,
        _In_ DWORD dwDesiredAccess,
        _In_ BOOL bInheritHandle,
        _In_ DWORD dwOptions
        );

    参数说明:

    第一个参数:

    hSourceProcessHandle,源进程句柄,即拥有源内核对象句柄的进程。如源句柄从属于当前进程,则使用GetCurrentProcess。

    第二个参数:

    hSourceHandle,源内核对象的句柄,也就是欲共享的内核对象的句柄。

    第三个参数:

    hTargetProcessHandle,目的进程句柄。

    第四个参数:

    lpTargetHandle,复制到目的进程句柄表中的内核对象句柄的指针。

    第五个参数:

    dwDesiredAccess,新句柄要求的安全访问级别。如dwOptions已指定了DUPLICATE_SAME_ACCESS,那么忽略这里的设置。

    第六个参数:

    bInheritHandle,新句柄是否可由hSourceProcessHandle的子进程继承。

    第七个参数:

    dwOptions,以下两个标志的任意组合

    DUPLICATE_SAME_ACCESS 新句柄拥有与原始句柄相同的安全访问特征

    DUPLICATE_CLOSE_SOURCE 关闭源进程中的句柄,该标识可以将一个内核对象传递给另外一个进程,即该内核对象的使用计数不会发生变化。

    下面给出一个实例,在该实例中,mypro.exe进程创建了一个线程,并将该线程的句柄复制到mytest.exe进程中,后者将该线程终止。

    mypro.exe源码:

    #include<stdio.h> 
    #include<stdarg.h>
    #include<windows.h>
    #include<winioctl.h>
    #include<tchar.h>
    #include<Shlwapi.h>
    #include<math.h>
    #include<time.h>
    #include<string>
    #include <TlHelp32.h>
    #include <process.h>
    #include<iostream>
    using namespace std;
    
    //#pragma comment(lib,"Shlwapi.lib")
    //#pragma comment(lib,"Kernel32.lib")
    
    
    
    void GetErrorMessage(DWORD dwErrCode, DWORD dwLanguageId){
    	DWORD dwRet = 0;
    	LPTSTR szResult = NULL;
    	setlocale(LC_ALL, "chs");
    	dwRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM,NULL,dwErrCode,dwLanguageId,(LPTSTR)&szResult,0,NULL);
    	if (dwRet == 0){szResult = NULL; wprintf(L"No such errorCode\n");}
    	else { wprintf(L"%ls", szResult); }
    	return;
    }
    
    
    UINT _stdcall testThread(PVOID para) {
    	while (TRUE) {
    		Sleep(1000);
    		wprintf(L"RUNNING.......\n");
    	}
    	return 0;
    }
    
    HANDLE GetProcessHandle(LPCTSTR szName)
    {
    	HANDLE hSanpshot;
    	hSanpshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//所有进程的快照
    	if (INVALID_HANDLE_VALUE == hSanpshot) { GetErrorMessage(GetLastError(),0); return NULL; }
    	PROCESSENTRY32 pe;//保存某个进程快照的结构体
    	BOOL bOk;
    	pe.dwSize = sizeof(pe);
    	bOk = Process32First(hSanpshot, &pe);//第一个进程
    	if (!bOk) { GetErrorMessage(GetLastError(), 0); return NULL; }
    	do {
    		if (!wcscmp(pe.szExeFile, szName)){return OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);}
    		bOk = Process32Next(hSanpshot, &pe);//下一个进程
    	} while (bOk);
    	CloseHandle(hSanpshot);
    	return NULL;
    }
    
    int   main(int   argc, char   *argv[]) {
    
    	HANDLE hThread;
    	hThread = (HANDLE)_beginthreadex(NULL, 0, testThread, NULL, 0, NULL);
    	wcout << L"hThread is " << hThread << endl;
    	HANDLE hTarget;
    	if (DuplicateHandle(GetCurrentProcess(), hThread, GetProcessHandle(L"mytest.exe"), &hTarget, 0, FALSE, DUPLICATE_SAME_ACCESS)) {
    		wprintf(L"DuplicateHandle SUCCEED\n");
    		wcout << L"hTarget is " << hTarget << endl;
    	}
    	else { GetErrorMessage(GetLastError(), 0); TerminateThread(hThread, 0); return 0; }
    
    	WaitForSingleObject(hThread, INFINITE);
    
    	wprintf(L"hThread is end\n");
    	system("pause");
    
    	return 0;
    }

    mytest.exe源码:

    #include<stdio.h> 
    #include<stdarg.h>
    #include<windows.h>
    #include<winioctl.h>
    #include<tchar.h>
    #include<Shlwapi.h>
    #include<math.h>
    #include<time.h>
    #include<string>
    #include <TlHelp32.h>
    #include <process.h>
    #include<iostream>
    using namespace std;
    
    //#pragma comment(lib,"Shlwapi.lib")
    //#pragma comment(lib,"Kernel32.lib")
    
    void GetErrorMessage(DWORD dwErrCode, DWORD dwLanguageId){
    	DWORD dwRet = 0;
    	LPTSTR szResult = NULL;
    	setlocale(LC_ALL, "chs");
    	dwRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM,NULL,dwErrCode,dwLanguageId,(LPTSTR)&szResult,0,NULL);
    	if (dwRet == 0){szResult = NULL; wprintf(L"No such errorCode\n");}
    	else { wprintf(L"%ls", szResult); }
    	return;
    }
    
    
    int   main(int   argc, char   *argv[]) {
    
    	HANDLE hRecv;
    
    	cout << "input hRecv : " << endl;
    	cin >> hRecv;
    
    	TerminateThread(hRecv, 0);
    	GetErrorMessage(GetLastError(), 0);
    	system("pause");
    
    	return 0;
    }

    需要先运行mytest.exe,否则句柄复制会失败。另外需要注意:复制内核对象的句柄与内核对象句柄的继承有些相似,即目的进程本身无法感知到其已经拥有了该内核对象的访问权限。由于目的进程已经运行,所以使用命令行参数或者更改目的进程的环境变量是无法做到的。上面的实例我是手动输入的...



    展开全文
  • 对象句柄的继承性命名对象复制对象句柄 复制对象句柄 共享跨越进程边界的内核对象的最后一个方法是使用 BOOL DuplicateHandle( HANDLE hSourceProcessHandle, HANDLE hSourceHandle, ...
  • Java 对象句柄

    2020-06-12 15:53:58
    但要注意,尽管将一切都“看作”对 象,但操纵的标识符实际是指向一个对象的“句柄”(Handle,也就是包装类的申明)。在其他Java参考书里,还可看到有的人将其称作一个“引用”, 甚至一个“指针”。可将这一情形想象....
  • 进程管理工具 可用来分析事件对象句柄.
  • 3.3.5 复制对象句柄

    2012-07-05 20:07:32
    3.3.5 复制对象句柄 共享跨越进程边界的内核对象的最后一个方法是使用D u p l i c a t e H a n d l e函数: 第3章内核对象计计39 下载 简单说来,该函数取出一个进程的句柄表中的项目,并将该项目拷贝到另一个...
  • 跨越进程边界共享内核对象有三种方法: ...对象句柄的继承性命名对象复制对象句柄 复制对象句柄 共享跨越进程边界的内核对象的最后一个方法是使用 BOOL DuplicateHandle( HANDLE hSource
  • 3.3.1 对象句柄的继承性 只有当进程具有父子关系时,才能使用对象句柄的继承性。在这种情况下,父进程可以使 用一个或多个内核对象句柄,并且该父进程可以决定生成一个子进程,为子进程赋予对父进程 的内核对象的...
  • 什么是对象句柄

    2012-10-24 09:33:06
    对象句柄 就是一个对象变量。  每种编程语言都有自己的数据处理方式。有些时候,程序员必须时刻留意准备处理的是什么类型。您曾利用一些特殊语法直接操作过对象,或处理过一些间接表示的对象吗(C或C++里的...
  • Java对象句柄(指针,引用地址)

    千次阅读 2016-11-16 15:13:40
    Java中的术语 : 对象句柄 句柄(Handle),在Java中的任何东西都可以看做对象, 存在一种标识符实际指向一个对象的句柄. 在Java的其他地方或者数据中也有称为 "引用"或者 "指针". 只是一个引用地址, 我们不能认为...
  • 跨越进程边界共享内核对象有三种方法: ...对象句柄的继承性命名对象复制对象句柄 复制对象句柄 共享跨越进程边界的内核对象的最后一个方法是使用 BOOL DuplicateHandle( HANDLE hSourceProcessHandle
  • harr = CHILDINFO 在您的命令窗口中显示活动句柄树。 所有找到的句柄都在 harr 中返回。 harr 中的索引与命令窗口中显示的一样。 输出示例: >> harr = childinfo; [00001]根[00002]图(图1) [00003]轴[00004]线...
  • windows内核对象句柄

    2019-10-08 17:47:29
    内核对象用于管理进程、线程和文件等诸多种类的大量资源,每一个内核对象都只是一...由于内核对象只能由操作系统内核访问,因此windows提供了句柄来标识内核对象,对于应用程序来说,这个句柄就相当于这个内核对象。...
  • Windows内核对象句柄的继承小总结

    千次阅读 2012-07-23 22:20:25
    对象句柄的继承   跨进程边界共享内核对象有三种常用的机制:为对象命名、复制对象句柄,还有就是使用对象句柄继承。   Windows支持“对象句柄的继承”,而不是支持对象的继承。(这里顺带总结一下,内核对象...
  • 进程的内核对象句柄表   当进程初始化的时候,系统会为其分配一个句柄表(handle table)。该句柄表只用于内核对象,不适用于用户对象或GDI对象。 具体该句柄表在系统中是种怎样的结构和是怎么被系统管理的,现在...
  • 实际上,SV中对象的引用有另一种东西,叫对象句柄(object handle),它跟C指针的概念很近,但又不完全相同。 本文将首先简单带过OOP相关的基础概念,接着对对象句柄做对比介绍,最后再介绍那个你可能似懂非懂的this...
  • java中对象句柄

    千次阅读 2017-05-31 17:52:40
    Java 句柄学习
  • 今天在GUI编程时,利用axes对象显示图形,在第一次作图完成后,axes句柄消失,其它对象句柄(例如popup对象)仍然存在,后来发现解决的办法: 打开axes对象的属性页面,将“NextPlot”属性更改为“ReplaceChildren...
  • 进程内核对象句柄

    2018-12-08 23:58:08
    这个句柄表仅供内核对象使用,不适用于用户对象或GDI对象。   调用函数来创建一个内核对象时,如果调用失败,那么返回的句柄值通常为0(NULL),这就是为什么第一个有效的句柄值为4的原因。之所以失败,可能是...
  • 3.2 进程的内核对象句柄表 当一个进程被初始化时,系统要为它分配一个句柄表。该句柄表只用于内核对象,不用于用户对 象或G D I对象。句柄表的详细结构和管理方法并没有具体的资料说明。通常我并不介绍操作系统中 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,491
精华内容 4,196
关键字:

对象句柄