• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2021-06-07 13:52 Aet 隐藏边栏 |   抢沙发  12 
文章评分 2 次,平均分 5.0

终端服务命名空间

  1. 在正在允许终端服务的计算机中,有多个用于内核对象的命名空间。
  2. 其中一个是全局命名空间,所有客户端都能访问到的内核对象要放在这个命名空间里面。这个命名空间主要由服务使用。
  3. 此外,每个客户端会话都有一个自己的命名空间。
  4. 可以通过ProcessIdToSessionId知道我们的进程在哪个终端服务中运行。

  1. 一个服务的命名内核对象始终是位于全局命名空间内的。默认情况下,在终端服务中,应用程序自己的命名内核对象在会话的命名空间内。
    但是可以强制把一个命名对象放入全局命名空间中,如下:

  1. 也可以显示指出希望把一个内核对象放在当前会话的命名空间内,如下:

专有命名空间

  1. 如果要确保我们自己创建的内核对象名称永远不会和其他应用程序的名称冲突,或者要确保它们免遭劫持,可以自定义前缀。并把这个前缀作为自己专有的命名空间使用。

  1. 对于使用ClosePrivateNamespace关闭命名空间时,如果希望关闭后该空间仍然可见,dwFlags传入0。
    否则传入PRIVATE_NAMESPACE_FLAG_DESTROY。
  2. 边界的话,将在两种情况下关闭:
    1. 进程终止运行
    2. 调用了DeleteBoundaryDescriptor
  3. 需要注意的是,如果还有内核对象在被使用,一定吧不要关闭命名空间。

四 跨进程边界共享内核对象

复制对象句柄

  1. 这个函数获得一个进程的句柄表中的一个记录项,然后在另一个句柄表中创建这个记录项的一个副本。
  2. 第一个和第三个参数是内核对象句柄。这两个句柄本身必须相对于调用这个函数的那个进程。另外,这两个参数标识的必须是进程内核对象。如果传递的句柄指向的是其他类型的句柄,函数调用就会失败。
  3. 第二个参数指向的是任何类型的内核对象的一个句柄。需要注意的是,这个句柄必须不能与调用这个函数的那个进程相关。该句柄必须与hSourceProcessHandle句柄所标识的那个进程相关。
  4. 第四个参数是HANDLE变量的地址,用来接收复制得到的HANDLE值。
  5. 最后三个参数用来指定这个内核对象在目标进程中所对应的句柄表项,而且应该使用何种访问掩码和继承标志。
  6. dwOptions
    1. 0
    2. DUPLICATE_SAME_ACCESS
      希望目标句柄拥有与源进程的句柄一样的访问掩码
      使用这个标志后,会忽略掉dwDesiredAccess参数
    3. DUPLICATE_CLOSE_SOURCE
      会关闭掉源进程中的句柄
      使用这个标志可以轻松的将一个内核对象传给另一个进程
      使用这个标志后,内核对象的使用计数不会受到影响

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享