[原创]gPXE无盘中修改sanbootconf驱动以修改计算机名
gPXE无盘中有一个补丁叫sanbootconf,它可以让XP通过ISCSI启动。它有一个功能,就是把无盘系统的IP地址固定为DHCP获取到的IP,以免多机启动造成IP冲突。但是它有一个问题没有解决,就是多机同时启动计算机名也会冲突。本程序就是解决这个问题的,关键代码如下:
/** * Store hostname parameters in registry * * @v hostname ComputerName * @ret ntstatus NT status */ static NTSTATUS store_hostname_parameters(LPSTR hostname) { LPWSTR value_name; HANDLE reg_key; NTSTATUS status; WCHAR buf[256]; LPCWSTR star = L"star"; WCHAR key_name_computername[] = ( L"" L"CurrentControlSet\\Control\\ComputerName\\ComputerName\\"); WCHAR key_name_hostname[] = ( L"" L"CurrentControlSet\\Services\\" L"Tcpip\\Parameters\\" ); RtlStringCbPrintfW ( buf, sizeof ( buf ), L"%wS-%S", star, hostname ); value_name = buf; /* Open key */ status = reg_open ( key_name_computername, ®_key ); if ( ! NT_SUCCESS ( status ) ) goto err_reg_open; /* Store computername */ status = reg_store_sz ( reg_key, L"ComputerName", value_name ); if ( ! NT_SUCCESS ( status ) ) goto err_reg_store; /* Close key */ reg_close(reg_key); /* open key */ status = reg_open(key_name_hostname, ®_key); if (!NT_SUCCESS(status)) goto err_reg_open; /* Store hostname */ status = reg_store_sz ( reg_key, L"Hostname", value_name ); if ( ! NT_SUCCESS ( status ) ) goto err_reg_store; status = reg_store_sz ( reg_key, L"NV Hostname", value_name ); if ( ! NT_SUCCESS ( status ) ) goto err_reg_store; /* Store hostname end */ err_reg_store: reg_close ( reg_key ); err_reg_open: return status; }
完整源码请到我的网盘下载,包含编译好的驱动文件。
浙公网安备 33010602011771号