Lines 39-44
Link Here
|
39 |
#include <errno.h> |
39 |
#include <errno.h> |
40 |
#include <string.h> |
40 |
#include <string.h> |
41 |
#include <unistd.h> |
41 |
#include <unistd.h> |
|
|
42 |
#include <inttypes.h> |
42 |
|
43 |
|
43 |
#include "ntreg.h" |
44 |
#include "ntreg.h" |
44 |
|
45 |
|
Lines 381-393
Link Here
|
381 |
#define D_OFFS(o) ( (void *)&(key->o)-(void *)hdesc->buffer-vofs ) |
382 |
#define D_OFFS(o) ( (void *)&(key->o)-(void *)hdesc->buffer-vofs ) |
382 |
|
383 |
|
383 |
key = (struct nk_key *)(hdesc->buffer + vofs); |
384 |
key = (struct nk_key *)(hdesc->buffer + vofs); |
384 |
printf("%04x type = 0x%02x %s\n", D_OFFS(type) , key->type, |
385 |
printf("%04x type = 0x%02x %s\n", D_OFFS(type) ,key->type, |
385 |
(key->type == KEY_ROOT ? "ROOT_KEY" : "") ); |
386 |
(key->type == KEY_ROOT ? "ROOT_KEY" : "") ); |
386 |
printf("%04x timestamp skipped\n", D_OFFS(timestamp) ); |
387 |
printf("%04x timestamp skipped\n", D_OFFS(timestamp) ); |
387 |
printf("%04x parent key offset = 0x%0lx\n", D_OFFS(ofs_parent) ,key->ofs_parent); |
388 |
printf("%04x parent key offset = 0x%0lx\n", D_OFFS(ofs_parent) ,key->ofs_parent); |
388 |
printf("%04x number of subkeys = %ld\n", D_OFFS(no_subkeys),key->no_subkeys); |
389 |
printf("%04x number of subkeys = %d\n", D_OFFS(no_subkeys),key->no_subkeys); |
389 |
printf("%04x lf-record offset = 0x%0lx\n",D_OFFS(ofs_lf),key->ofs_lf); |
390 |
printf("%04x lf-record offset = 0x%0lx\n",D_OFFS(ofs_lf),key->ofs_lf); |
390 |
printf("%04x number of values = %ld\n", D_OFFS(no_values),key->no_values); |
391 |
printf("%04x number of values = %d\n", D_OFFS(no_values),key->no_values); |
391 |
printf("%04x val-list offset = 0x%0lx\n",D_OFFS(ofs_vallist),key->ofs_vallist); |
392 |
printf("%04x val-list offset = 0x%0lx\n",D_OFFS(ofs_vallist),key->ofs_vallist); |
392 |
printf("%04x sk-record offset = 0x%0lx\n",D_OFFS(ofs_sk),key->ofs_sk); |
393 |
printf("%04x sk-record offset = 0x%0lx\n",D_OFFS(ofs_sk),key->ofs_sk); |
393 |
printf("%04x classname offset = 0x%0lx\n",D_OFFS(ofs_classnam),key->ofs_classnam); |
394 |
printf("%04x classname offset = 0x%0lx\n",D_OFFS(ofs_classnam),key->ofs_classnam); |
Lines 415-421
Link Here
|
415 |
key = (struct vk_key *)(hdesc->buffer + vofs); |
416 |
key = (struct vk_key *)(hdesc->buffer + vofs); |
416 |
printf("%04x name length = %d (0x%0x)\n", D_OFFS(len_name), |
417 |
printf("%04x name length = %d (0x%0x)\n", D_OFFS(len_name), |
417 |
key->len_name, key->len_name ); |
418 |
key->len_name, key->len_name ); |
418 |
printf("%04x length of data = %ld (0x%0lx)\n", D_OFFS(len_data), |
419 |
printf("%04x length of data = %d (0x%0lx)\n", D_OFFS(len_data), |
419 |
key->len_data, key->len_data ); |
420 |
key->len_data, key->len_data ); |
420 |
printf("%04x data offset = 0x%0lx\n",D_OFFS(ofs_data),key->ofs_data); |
421 |
printf("%04x data offset = 0x%0lx\n",D_OFFS(ofs_data),key->ofs_data); |
421 |
printf("%04x value type = 0x%0lx %s\n", D_OFFS(val_type), key->val_type, |
422 |
printf("%04x value type = 0x%0lx %s\n", D_OFFS(val_type), key->val_type, |
Lines 445-453
Link Here
|
445 |
printf("%04x *unused?* = %d\n" , D_OFFS(dummy1), key->dummy1 ); |
446 |
printf("%04x *unused?* = %d\n" , D_OFFS(dummy1), key->dummy1 ); |
446 |
printf("%04x Offset to prev sk = 0x%0lx\n", D_OFFS(ofs_prevsk), key->ofs_prevsk); |
447 |
printf("%04x Offset to prev sk = 0x%0lx\n", D_OFFS(ofs_prevsk), key->ofs_prevsk); |
447 |
printf("%04x Offset to next sk = 0x%0lx\n", D_OFFS(ofs_nextsk), key->ofs_nextsk); |
448 |
printf("%04x Offset to next sk = 0x%0lx\n", D_OFFS(ofs_nextsk), key->ofs_nextsk); |
448 |
printf("%04x Usage counter = %ld (0x%0lx)\n", D_OFFS(no_usage), |
449 |
printf("%04x Usage counter = %d (0x%0lx)\n", D_OFFS(no_usage), |
449 |
key->no_usage,key->no_usage); |
450 |
key->no_usage,key->no_usage); |
450 |
printf("%04x Security data len = %ld (0x%0lx)\n", D_OFFS(len_sk), |
451 |
printf("%04x Security data len = %d (0x%0lx)\n", D_OFFS(len_sk), |
451 |
key->len_sk,key->len_sk); |
452 |
key->len_sk,key->len_sk); |
452 |
|
453 |
|
453 |
printf("== End of key info.\n"); |
454 |
printf("== End of key info.\n"); |
Lines 1209-1217
Link Here
|
1209 |
{ |
1210 |
{ |
1210 |
struct vk_key *vkkey; |
1211 |
struct vk_key *vkkey; |
1211 |
int i,vkofs; |
1212 |
int i,vkofs; |
1212 |
long *vlistkey; |
1213 |
int32_t *vlistkey; |
1213 |
|
1214 |
|
1214 |
vlistkey = (long *)(hdesc->buffer + vlistofs); |
1215 |
vlistkey = (int32_t *)(hdesc->buffer + vlistofs); |
1215 |
|
1216 |
|
1216 |
for (i = 0; i < numval; i++) { |
1217 |
for (i = 0; i < numval; i++) { |
1217 |
vkofs = vlistkey[i] + 0x1004; |
1218 |
vkofs = vlistkey[i] + 0x1004; |
Lines 1242-1248
Link Here
|
1242 |
struct li_key *likey; |
1243 |
struct li_key *likey; |
1243 |
struct ri_key *rikey; |
1244 |
struct ri_key *rikey; |
1244 |
|
1245 |
|
1245 |
long *vlistkey; |
1246 |
int32_t *vlistkey; |
1246 |
int newnkofs, plen, i, lfofs, vlistofs, adjust, r, ricnt, subs; |
1247 |
int newnkofs, plen, i, lfofs, vlistofs, adjust, r, ricnt, subs; |
1247 |
char *buf; |
1248 |
char *buf; |
1248 |
char part[ABSPATHLEN+1]; |
1249 |
char part[ABSPATHLEN+1]; |
Lines 1291-1297
Link Here
|
1291 |
if (!path[plen] && type == 1 && key->no_values) { |
1292 |
if (!path[plen] && type == 1 && key->no_values) { |
1292 |
/* printf("VK namematch for <%s>\n",part); */ |
1293 |
/* printf("VK namematch for <%s>\n",part); */ |
1293 |
vlistofs = key->ofs_vallist + 0x1004; |
1294 |
vlistofs = key->ofs_vallist + 0x1004; |
1294 |
vlistkey = (long *)(buf + vlistofs); |
1295 |
vlistkey = (int32_t *)(buf + vlistofs); |
1295 |
i = vlist_find(hdesc, vlistofs, key->no_values, part); |
1296 |
i = vlist_find(hdesc, vlistofs, key->no_values, part); |
1296 |
if (i != -1) { |
1297 |
if (i != -1) { |
1297 |
return(vlistkey[i] + 0x1000); |
1298 |
return(vlistkey[i] + 0x1000); |
Lines 1390-1396
Link Here
|
1390 |
|
1391 |
|
1391 |
} |
1392 |
} |
1392 |
|
1393 |
|
1393 |
printf("Node has %ld subkeys and %ld values",key->no_subkeys,key->no_values); |
1394 |
printf("Node has %d subkeys and %d values",key->no_subkeys,key->no_values); |
1394 |
if (key->len_classnam) printf(", and class-data of %d bytes",key->len_classnam); |
1395 |
if (key->len_classnam) printf(", and class-data of %d bytes",key->len_classnam); |
1395 |
printf("\n"); |
1396 |
printf("\n"); |
1396 |
|
1397 |
|
Lines 1754-1760
Link Here
|
1754 |
void del_allvalues(struct hive *hdesc, int nkofs) |
1755 |
void del_allvalues(struct hive *hdesc, int nkofs) |
1755 |
{ |
1756 |
{ |
1756 |
int vlistofs, o, vkofs; |
1757 |
int vlistofs, o, vkofs; |
1757 |
long *vlistkey; |
1758 |
int32_t *vlistkey; |
1758 |
struct nk_key *nk; |
1759 |
struct nk_key *nk; |
1759 |
|
1760 |
|
1760 |
nk = (struct nk_key *)(hdesc->buffer + nkofs); |
1761 |
nk = (struct nk_key *)(hdesc->buffer + nkofs); |
Lines 1769-1775
Link Here
|
1769 |
} |
1770 |
} |
1770 |
|
1771 |
|
1771 |
vlistofs = nk->ofs_vallist + 0x1004; |
1772 |
vlistofs = nk->ofs_vallist + 0x1004; |
1772 |
vlistkey = (long *)(hdesc->buffer + vlistofs); |
1773 |
vlistkey = (int32_t *)(hdesc->buffer + vlistofs); |
1773 |
|
1774 |
|
1774 |
/* Loop through index and delete all vk's */ |
1775 |
/* Loop through index and delete all vk's */ |
1775 |
for (o = 0; o < nk->no_values; o++) { |
1776 |
for (o = 0; o < nk->no_values; o++) { |
Lines 1794-1800
Link Here
|
1794 |
int del_value(struct hive *hdesc, int nkofs, char *name) |
1795 |
int del_value(struct hive *hdesc, int nkofs, char *name) |
1795 |
{ |
1796 |
{ |
1796 |
int vlistofs, slot, o, n, vkofs, newlistofs; |
1797 |
int vlistofs, slot, o, n, vkofs, newlistofs; |
1797 |
long *vlistkey, *tmplist, *newlistkey; |
1798 |
int32_t *vlistkey, *tmplist, *newlistkey; |
1798 |
struct nk_key *nk; |
1799 |
struct nk_key *nk; |
1799 |
char *blank=""; |
1800 |
char *blank=""; |
1800 |
|
1801 |
|
Lines 1814-1820
Link Here
|
1814 |
} |
1815 |
} |
1815 |
|
1816 |
|
1816 |
vlistofs = nk->ofs_vallist + 0x1004; |
1817 |
vlistofs = nk->ofs_vallist + 0x1004; |
1817 |
vlistkey = (long *)(hdesc->buffer + vlistofs); |
1818 |
vlistkey = (int32_t *)(hdesc->buffer + vlistofs); |
1818 |
|
1819 |
|
1819 |
slot = vlist_find(hdesc, vlistofs, nk->no_values, name); |
1820 |
slot = vlist_find(hdesc, vlistofs, nk->no_values, name); |
1820 |
|
1821 |
|
Lines 1828-1848
Link Here
|
1828 |
del_vk(hdesc, vkofs); |
1829 |
del_vk(hdesc, vkofs); |
1829 |
|
1830 |
|
1830 |
/* Copy out old index list */ |
1831 |
/* Copy out old index list */ |
1831 |
CREATE(tmplist,long,nk->no_values); |
1832 |
CREATE(tmplist,int32_t,nk->no_values); |
1832 |
memcpy(tmplist, vlistkey, nk->no_values * sizeof(long)); |
1833 |
memcpy(tmplist, vlistkey, nk->no_values * sizeof(int32_t)); |
1833 |
|
1834 |
|
1834 |
free_block(hdesc,vlistofs-4); /* Get rid of old list */ |
1835 |
free_block(hdesc,vlistofs-4); /* Get rid of old list */ |
1835 |
|
1836 |
|
1836 |
nk->no_values--; |
1837 |
nk->no_values--; |
1837 |
|
1838 |
|
1838 |
if (nk->no_values) { |
1839 |
if (nk->no_values) { |
1839 |
newlistofs = alloc_block(hdesc, vlistofs, nk->no_values * sizeof(long)); |
1840 |
newlistofs = alloc_block(hdesc, vlistofs, nk->no_values * sizeof(int32_t)); |
1840 |
if (!newlistofs) { |
1841 |
if (!newlistofs) { |
1841 |
printf("del_value: FATAL: Was not able to alloc new index list\n"); |
1842 |
printf("del_value: FATAL: Was not able to alloc new index list\n"); |
1842 |
abort(); |
1843 |
abort(); |
1843 |
} |
1844 |
} |
1844 |
/* Now copy over, omitting deleted entry */ |
1845 |
/* Now copy over, omitting deleted entry */ |
1845 |
newlistkey = (long *)(hdesc->buffer + newlistofs + 4); |
1846 |
newlistkey = (int32_t *)(hdesc->buffer + newlistofs + 4); |
1846 |
for (n = 0, o = 0; o < nk->no_values+1; o++, n++) { |
1847 |
for (n = 0, o = 0; o < nk->no_values+1; o++, n++) { |
1847 |
if (o == slot) o++; |
1848 |
if (o == slot) o++; |
1848 |
newlistkey[n] = tmplist[o]; |
1849 |
newlistkey[n] = tmplist[o]; |
Lines 1876-1882
Link Here
|
1876 |
struct lf_key *newlf = NULL, *oldlf; |
1877 |
struct lf_key *newlf = NULL, *oldlf; |
1877 |
struct li_key *newli = NULL, *oldli; |
1878 |
struct li_key *newli = NULL, *oldli; |
1878 |
struct nk_key *key, *newnk, *onk; |
1879 |
struct nk_key *key, *newnk, *onk; |
1879 |
long hash; |
1880 |
int32_t hash; |
1880 |
|
1881 |
|
1881 |
key = (struct nk_key *)(hdesc->buffer + nkofs); |
1882 |
key = (struct nk_key *)(hdesc->buffer + nkofs); |
1882 |
|
1883 |
|
Lines 2405-2411
Link Here
|
2405 |
} |
2406 |
} |
2406 |
|
2407 |
|
2407 |
#if 0 |
2408 |
#if 0 |
2408 |
printf("Node has %ld subkeys and %ld values\n",key->no_subkeys,key->no_values); |
2409 |
printf("Node has %d subkeys and %d values\n",key->no_subkeys,key->no_values); |
2409 |
#endif |
2410 |
#endif |
2410 |
if (key->no_subkeys) { |
2411 |
if (key->no_subkeys) { |
2411 |
while ((ex_next_n(hdesc, nkofs, &count, &countri, &ex) > 0)) { |
2412 |
while ((ex_next_n(hdesc, nkofs, &count, &countri, &ex) > 0)) { |
Lines 2426-2432
Link Here
|
2426 |
|
2427 |
|
2427 |
|
2428 |
|
2428 |
/* Get and copy keys CLASS-data (if any) to buffer |
2429 |
/* Get and copy keys CLASS-data (if any) to buffer |
2429 |
* Returns a buffer with the data (first long is size). see ntreg.h |
2430 |
* Returns a buffer with the data (first int32_t is size). see ntreg.h |
2430 |
* NOTE: caller must deallocate buffer! a simple free(keyval) will suffice. |
2431 |
* NOTE: caller must deallocate buffer! a simple free(keyval) will suffice. |
2431 |
*/ |
2432 |
*/ |
2432 |
struct keyval *get_class(struct hive *hdesc, |
2433 |
struct keyval *get_class(struct hive *hdesc, |
Lines 2574-2580
Link Here
|
2574 |
struct hive *hdesc; |
2575 |
struct hive *hdesc; |
2575 |
int fmode,r,vofs; |
2576 |
int fmode,r,vofs; |
2576 |
struct stat sbuf; |
2577 |
struct stat sbuf; |
2577 |
unsigned long pofs; |
2578 |
uint32_t pofs; |
2578 |
/* off_t l; */ |
2579 |
/* off_t l; */ |
2579 |
char *c; |
2580 |
char *c; |
2580 |
struct hbin_page *p; |
2581 |
struct hbin_page *p; |