# 无法连接公共机（10.46.1.132）打印机 —— 诊断报告

> 诊断时间：2026-09-20 · 诊断机：本机（10.46.1.144 / DESKTOP-IU0LISQ / 用户 NS）
> 目标机：10.46.1.132（NetBIOS 名 **NS-20240510ESIK**，工作组 **WORKGROUP**）
> 总结论：**网络层与 SMB 传输层完全正常，故障卡在"枚举/发现 + 权限凭据"层**

---

## 一、分层验证结果（全部实测）

| 层级 | 检测项 | 实测结果 | 判定 |
|---|---|---|---|
| 网络层 | ICMP ping | 通，RTT < 1ms | ✅ |
| 网络层 | 网段 | 10.46.1.144/24 ↔ 10.46.1.132/24，同网段 | ✅ |
| 传输层 | TCP 445（SMB） | OPEN | ✅ |
| 传输层 | TCP 139（NetBIOS 会话） | OPEN | ✅ |
| 传输层 | TCP 135（RPC 端点映射） | OPEN | ✅ |
| 传输层 | TCP 3389（远程桌面） | OPEN | ✅ 与"能控制电脑"一致 |
| 传输层 | TCP 9100 / 515 | **REFUSED** | ⚠️ 10.46.1.132 **不是** RAW 网络打印机 |
| 传输层 | RPC 动态端口抽查 | 49155 / 49157 OPEN，49154 / 49156 CLOSED | ⚠️ 部分开放 |
| SMB 层 | `\\10.46.1.132\print$` | **True（可读）**，含 color / IA64 / W32X86 / x64 | ✅ 通道通 |
| SMB 层 | `\\NS-20240510ESIK\print$`（用机器名） | **True** | ✅ 名称解析也正常 |
| SMB 层 | `net use \\10.46.1.132\IPC$`（当前身份） | **exit=0，命令成功完成** | ✅ 会话能建立 |
| **枚举层** | `net view \\10.46.1.132` | **系统错误 5 — 拒绝访问**（建立 IPC$ 会话后仍如此） | ❌ **故障点 1** |
| **枚举层** | `Get-Printer -ComputerName 10.46.1.132` | 对指定资源的访问已被拒绝 | ❌ **故障点 1** |
| **枚举层** | `Get-WmiObject Win32_Printer -ComputerName` | **RPC 服务器不可用（0x800706BA）** | ❌ **故障点 1** |
| 凭据层 | 凭据管理器中 10.46.1.132 | **无任何保存凭据** | ❌ **故障点 2** |
| 发现层 | 本机网络位置（以太网 3） | **公用网络 Public** | ❌ **故障点 3** |
| 发现层 | FDResPub / fdPHost / upnphost | **全部 Stopped** | ❌ **故障点 3** |
| 本机 | Print Spooler / LanmanWorkstation / LanmanServer / RpcSs | 全部 Running | ✅ |
| 本机 | SMB 客户端签名 | EnableSecuritySignature=True（支持签名，协商无碍） | ✅ |
| 本机 | 已安装网络打印机 | **0 台**（仅 3 个虚拟打印机） | ⚠️ 从未连成功 |
| 本机 | 当前令牌 | DESKTOP-IU0LISQ\NS，**IsAdministrator = False** | ⚠️ |
| 本机 | PointAndPrint / RPC 打印策略 | 均**未配置**（走系统默认加固） | ⚠️ |
| 本机 | SMB 服务端 | EnableSMB1Protocol=False、SMB2=True、EncryptData=False | — |
| 本机 | 本机共享 | ADMIN$、C$~K$、E:\APQP项目 等大量共享 | ✅ 本机是共享机 |

---

## 二、根因分析

### 🥇 根因 1：能"进门"但"看不到目录" —— 凭据缺失导致共享枚举被拒

这是最核心的一条，也是"**能远程控制对方电脑，却连不上对方打印机**"的标准解释。

- 你控制对方走的是 **3389 远程桌面**，登录时用的是对方本地账号 → 能进桌面。
- 但你连打印机走的是 **445 SMB 共享**，是**一套完全独立的认证**。
- 实测：本机凭据管理器里 **没有任何 10.46.1.132 的凭据**（`cmdkey` 无命中）。
- 于是 Windows 拿本机账号 `DESKTOP-IU0LISQ\NS` 去访问对方。对方是 **WORKGROUP 工作组**机（无域控统一认证），不认识这个账号 → 认证降级为匿名/来宾。
- 匿名身份的实测表现：
  - ✅ 能读 `print$`（该驱动共享对 Everyone 开放）
  - ✅ 能建 `IPC$` 会话
  - ❌ **无法枚举共享列表**（`net view` → 系统错误 5）
  - ❌ **无法枚举远程打印机**（`Get-Printer` → 拒绝访问）
  - ❌ **WMI 远程调用失败**（RPC 服务器不可用）

> 关键佐证：**建立 IPC$ 会话之后再 `net view`，依然被拒**。这说明不是"没连上"，而是"连上了但权限不够、被对方拒了枚举"。

**结果就是：在"网络"里、在添加打印机向导里，你根本看不到对方共享的打印机** —— 表现成"连不上"。

### 🥈 根因 2：本机网络位置 = 公用网络，网络发现被彻底关闭

- 以太网 3 `NetworkCategory = Public`。
- 公用档位下 Windows 关闭网络发现，实测 **FDResPub / fdPHost / upnphost 三个服务全部 Stopped**。
- 后果：**"网络"邻居里根本不会出现 NS-20240510ESIK 这台机**，也无法自动发现共享打印机。
- 注意：这不阻断 UNC 直连（`\\10.46.1.132`），只阻断"自动发现"，所以是**次要原因**。

### 🥉 根因 3（潜在）：PrintNightmare 驱动安装限制

- 本机 `RestrictDriverInstallationToAdministrators`、`RpcAuthnLevelPrivacyEnabled` **均未配置** → 走 Win11 22H2 系统默认 = **受限**。
- 实测当前令牌 `IsAdministrator = False`（未提权）。
- 若认证问题解决后仍失败，典型报错为 **0x0000011b** 或 **0x00000709**，届时应对这一层。

### ⚠️ 待证实：对方是否真的"共享"了打印机

- 由于枚举被拒，本机**无法确认对方是否把打印机设为共享**。
- `print$` 下有 x64/W32X86/color 驱动目录，只能证明对方开启了"文件和打印机共享"组件，**不能证明有打印机被共享出去**。
- 另：10.46.1.132 的 9100/515 端口 REFUSED，说明**该 IP 本身不是网络打印机**。

---

## 三、修复方案

### 步骤 1 —— 添加 Windows 凭据（解决根因 1，最关键）

控制面板 → 凭据管理器 → **Windows 凭据** → 添加 Windows 凭据：

| 字段 | 值 |
|---|---|
| Internet 地址或网络地址 | `10.46.1.132` |
| 用户名 | `NS-20240510ESIK\对方账号`（**前缀必须是对方机器名**）或 `.\对方账号` |
| 密码 | 对方机器上该账号的密码 |

命令行等价写法：

```cmd
cmdkey /add:10.46.1.132 /user:NS-20240510ESIK\对方账号 /pass:对方密码
```

验证是否生效：

```cmd
net view \\10.46.1.132
```

能列出共享（含打印机）即说明认证已打通。

### 步骤 2 —— 本机网络改为"专用"并开启网络发现（解决根因 2）

需**管理员** PowerShell：

```powershell
Set-NetConnectionProfile -InterfaceAlias "以太网 3" -NetworkCategory Private
```

再补服务：

```cmd
sc config FDResPub start= auto
sc start FDResPub
sc config fdPHost start= auto
sc start fdPHost
```

然后：控制面板 → 网络和共享中心 → 更改高级共享设置 → 启用**网络发现** + 启用**文件和打印机共享**。

### 步骤 3 —— 用 UNC 直连添加打印机（绕过枚举，最快见效）

前提：知道对方打印机的**共享名**。你能在公共机上远程桌面，可在对方
「设置 → 蓝牙和其他设备 → 打印机和扫描仪 → 打印机属性 → 共享」里看到共享名。

然后在本机：

```cmd
\\10.46.1.132
```

资源管理器打开后双击该打印机；或
设置 → 打印机和扫描仪 → 添加打印机 →「我需要的打印机不在列表中」→ 按名称选择 → 填
`\\10.46.1.132\打印机共享名`。

> UNC 直连走 SMB 管道 spoolss，**不依赖 net view 枚举**，因此即使枚举被拒也有可能直接连成功。

### 步骤 4 —— 若报 0x0000011b / 0x00000709（根因 3 兜底）

用**管理员身份**重新添加打印机；或在管理员 PowerShell 中放行：

```powershell
New-Item -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint' -Force
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint' `
  -Name 'RestrictDriverInstallationToAdministrators' -Value 0 -Type DWord
```

### 步骤 5 —— 对方机器侧自查（你能远程控制它，顺手确认）

1. 打印机属性 → 共享 → 是否勾选「**共享这台打印机**」，共享名是什么
2. 控制面板 → 高级共享设置 → 是否启用「**文件和打印机共享**」
3. 是否开启「**密码保护的共享**」——开启则本机必须走步骤 1
4. 防火墙公用档位是否放行「文件和打印机共享」入站

---

## 四、已排除的可能性

| 怀疑项 | 排除依据 |
|---|---|
| 网络不通 / 走错网段 | ping < 1ms，同 /24 |
| 防火墙挡住 SMB | 445 / 139 / 135 全 OPEN |
| 对方没开 SMB 服务 | `print$` 可读，且 IPC$ 会话建立成功 |
| NetBIOS 名称解析失败 | `\\NS-20240510ESIK\print$` 访问成功 |
| Print Spooler 故障 | 本机 Spooler = Running |
| SMB 签名协商不兼容 | 本机客户端 EnableSecuritySignature=True |
| SMB1 未启用导致老设备不兼容 | 对方为 Win 系打印服务器，SMB2 协商正常 |
| 10.46.1.132 是独立 IP 网络打印机 | 9100 / 515 均 REFUSED |

---

## 五、为完成最终定位，需要你确认 3 件事

1. **打印机是怎么接的？** 接在公共机 USB 上由它共享 / 是有独立 IP 的网络打印机 / 不确定
2. **连接时的具体报错**是什么？（看不到对方机器、提示输入用户名密码、0x0000011b、0x00000709、还是别的）
3. **公共机上打印机的共享名**是什么？（远程桌面进去看一眼即可）

拿到这 3 条，可以直接给出精确到命令的修复动作。

---

## 六、最终结果 —— ✅ 已解决

用户补充信息后确认：**报错 0x00000709**，共享打印机名 **EPSON L3250 Series**，对方系统 **Win7**。
打印机已成功添加并设为默认，**测试作业已提交**。

### 实际根因链（三层叠加）

| 层 | 根因 | 解法 | 状态 |
|---|---|---|---|
| ① 认证 | 工作组无域控，本机对对方只有匿名身份，spoolss 打印管道拒绝匿名（表现为 0x00000709"服务器不存在"） | `cmdkey` 写入对方 Administrator 凭据 | ✅ |
| ② RPC 兼容 | **Win7 打印服务器 + Win11 22H2 客户端**，2021 年补丁后 RPC 认证级别协商失败 | 客户端 `HKLM\SYSTEM\CurrentControlSet\Control\Print\RpcAuthnLevelPrivacyEnabled = 0` | ✅ |
| ③ 驱动策略 | PrintNightmare 加固后标准用户无权从打印服务器拉取驱动 | `…\Printers\PointAndPrint\RestrictDriverInstallationToAdministrators = 0` | ✅ |

### 实际执行的命令

```cmd
:: ① 凭据（每用户，普通权限即可）
cmdkey /add:10.46.1.132      /user:NS-20240510ESIK\Administrator /pass:<密码>
cmdkey /add:NS-20240510ESIK  /user:NS-20240510ESIK\Administrator /pass:<密码>

:: ②③ 管理员权限 —— 见「修复打印机连接_管理员运行.bat」
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print" /v RpcAuthnLevelPrivacyEnabled /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f
net stop spooler & net start spooler

:: 最终连接（务必用「计算机名」，不用 IP）
powershell -c "Add-Printer -ConnectionName '\\NS-20240510ESIK\EPSON L3250 Series'"
```

### 连接结果

| 项目 | 值 |
|---|---|
| 打印机名称 | `\\NS-20240510ESIK\EPSON L3250 Series` |
| 端口 | USB001（打印机接在对方 USB 上） |
| 驱动 | EPSON L3250 Series（已从对方 print$ 下载并装入） |
| 状态 | Normal |
| 默认打印机 | 是（已自动设为默认） |
| 测试作业 | id=165，提交者 Administrator，状态 Spooling ✔ |

### 关键经验

1. **必须用计算机名 `\\NS-20240510ESIK\` 而不是 IP** —— KB5006670 之后，IP 直连共享打印机会被 RPC 名称校验拦截。
2. **RDP/远程控制的登录凭据不会自动复用到 SMB 打印共享**，工作组环境下必须用 `cmdkey` 单独存一份。
3. **Win7 + Win11 组合必然要打 RPC 兼容补丁**（`RpcAuthnLevelPrivacyEnabled=0`），否则凭据正确也报 0x00000709 / 0x0000011b。
4. `net use` 返回"命令成功完成"**不代表拥有高权限** —— 对方 Win7 处于仅来宾（ForceGuest）模式时会静默以 Guest 登录，需用 `net view` 交叉验证是否真的拿到权限。
