i have list of subkeys , list of values in registry branch.
[dllimport("advapi32.dll", entrypoint="regenumkeyexw", callingconvention=callingconvention.winapi)] [methodimpl(methodimploptions.preservesig)] extern private static int regenumkeyex(intptr hkey, uint index, char[] lpname, ref uint lpcbname, intptr reserved, intptr lpclass, intptr lpcbclass, out long lpftlastwritetime); // names of subkeys underneath registry key. public string[] getsubkeynames() { lock(this) { if(hkey != intptr.zero) { // number of subkey names under key. uint numsubkeys, numvalues; regqueryinfokey(hkey, null,intptr.zero, intptr.zero,out numsubkeys, intptr.zero, intptr.zero, out numvalues,intptr.zero, intptr.zero, intptr.zero, intptr.zero); // create array hold names. string[] names = new string [numsubkeys]; stringbuilder sb = new stringbuilder(); uint max_reg_key_size = 1024; uint index = 0; long writetime; while (index < numsubkeys) { sb = new stringbuilder(); if (regenumkeyex(hkey,index,sb,ref max_reg_key_size, intptr.zero,intptr.zero,intptr.zero,out writetime) != 0) { break; } names[(int)(index++)] = sb.tostring(); } // return final name array caller. return names; } return new string [0]; } }
it works well, first element. returns keyname 0-index, other returns "".
how can be?
btw: replaced definition yours, work well
what p/invoke definition regenumkeyex?
perhaps, try one:
[dllimport("advapi32.dll", entrypoint = "regenumkeyex")] extern private static int regenumkeyex(uintptr hkey, uint index, stringbuilder lpname, ref uint lpcbname, intptr reserved, intptr lpclass, intptr lpcbclass, out long lpftlastwritetime);
from pinvoke.net site takes stringbuilder instead of character array. rule out potential errors in code don't show such arraytostring
, in p/invoke definition, don't show.
Comments
Post a Comment