枚举远程服务

时间:2018-06-29 06:22:41

标签: .net

var Excel = require('exceljs'); var wb = new Excel.Workbook(); var path = require('path'); var filePath = path.resolve(__dirname,'sample.xlsx'); wb.xlsx.readFile(filePath).then(function(){ var sh = wb.getWorksheet("Sheet1"); sh.getRow(1).getCell(2).value = 32; wb.xlsx.writeFile("sample2.xlsx"); console.log("Row-3 | Cell-2 - "+sh.getRow(3).getCell(2).value); console.log(sh.rowCount); //Get all the rows data [1st and 2nd column] for (i = 1; i <= sh.rowCount; i++) { console.log(sh.getRow(i).getCell(1).value); console.log(sh.getRow(i).getCell(2).value); } }); 名称空间中的

ServiceController.GetServices()可通过传递其netbios名称作为参数来枚举本地计算机或远程计算机上的服务器。

在幕后,这是通过Windows NT RPC完成的-这当然意味着它是使用用户凭据进行身份验证的。

在Active Directory(以前是Windows NT域)环境中,这意味着将在目标PC上检查AD用户的权限,以查看是否已为该用户分配了访问服务列表(例如,域)所需的特权。管理员通常会这样做。

在没有在AD Domain Admin帐户下运行软件的环境中,或者仅仅是在没有使用AD帐户来控制访问但已远程设置了一些非AD帐户的环境中,我们需要确保使用正确的远程帐户。

在原生世界中,我们将调用System.ServiceProcess并传递一个用于克隆当前访问令牌的标志-确保所有本地访问保持不变,但将远程凭据更改为所提供的凭据(不进行任何检查),然后调用LogonUser以使该新令牌为当前令牌,然后执行该操作,而不是调用RPC。

.Net通过System.Security.Principal命名空间中的WindowsIdentity.Impersonate()提供此功能。我们需要的是一个WindowsIdentity,它代表当前用户,但具有更改/提供的远程凭据...

这里的小路很冷。 WindowsIdentity对象似乎总是由某个框架提供,和/或'ImpersonateUser方法的静态变体采用一个IntPtr参数,该参数是从Impersonate返回的本机句柄,但到目前为止,我们没有借助PInvoke,我们肯定可以在不离开托管代码的情况下关闭循环吗?

不。 .net功能覆盖范围似乎存在一个奇怪的缺口:一堆看似得到良好支持和记录的对象,这些对象如果没有PInvoke(或使用第3方库来隐藏PInvoke)就无法使用。

我什至看到关于这些功能的MSDN文章都只是大胆地包含了对advapi:LogonUser本机API的调用,但是我很反感。当然可以,肯定有某种方法可以在不离开托管代码的情况下使用远程凭据构造WindowsIdentity?

0 个答案:

没有答案
相关问题