/* * regsave.c - Save the registry subkey. * */ #include #include #include "regerror.h" #include "regpath.h" #include "getpriv.h" int get_priv_to_save() { return get_priv(SE_BACKUP_NAME); } int save_reg(HKEY subkey, char *fname) { int err; /* サブキーを保存する */ if (err = RegSaveKey(subkey, fname, NULL)) { print_win32_error("RegSaveKey", err); SetLastError(err); return 0; } return 1; } int main(int argc, char **argv) { HKEY subkey; char *subkey_alias; if (argc < 3) { fputs("usage: regsave registry-subkey-path filename\n", stderr); return 1; } /* open_reg() のために最後が '\' でなければ '\' を追加する */ if (!(subkey_alias = (char *)malloc(strlen(argv[1]) + 1))) { fputs("regsave: Not enough memory.\n", stderr); return 1; } strcpy(subkey_alias, argv[1]); if (subkey_alias[strlen(subkey_alias) - 1] != '\\') { strcat(subkey_alias, "\\"); } /* サブキーをオープンする */ if (!(subkey = open_reg(subkey_alias, KEY_SET_VALUE, (char **)NULL))) { return 1; } /* 特権を取得する */ if (!get_priv_to_save()) { return 1; } /* サブキーを保存する */ if (!save_reg(subkey, argv[2])) { return 1; } /* サブキーをクローズする */ close_reg(subkey); /* 確保した領域を解放する */ free(subkey_alias); return 0; }