[原创]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, &reg_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, &reg_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;
}

 

完整源码请到我的网盘下载,包含编译好的驱动文件。

 

posted @ 2009-04-07 16:11  流星无语  阅读(764)  评论(0)    收藏  举报