Спасибо всем. Я застрял в строках стандартного формата в течение некоторого времени. Я также использовал пользовательскую функцию в VB.
Разметка: -
<asp:Label ID="Label3" runat="server" text='<%# Formatlabel(DataBinder.Eval(Container.DataItem, "psWages1D")) %>'/>
Код позади: -
Public Function fLabel(ByVal tval) As String
fLabel = tval.ToString("#,##0.00%;(#,##0.00%);Zero")
End Function
Используйте экспортированную функцию LoadLibrary
и NtQueryKey
, как показано в следующем фрагменте кода.
#include <windows.h>
#include <string>
typedef LONG NTSTATUS;
#ifndef STATUS_SUCCESS
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#endif
#ifndef STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L)
#endif
std::wstring GetKeyPathFromKKEY(HKEY key)
{
std::wstring keyPath;
if (key != NULL)
{
HMODULE dll = LoadLibrary(L"ntdll.dll");
if (dll != NULL) {
typedef DWORD (__stdcall *NtQueryKeyType)(
HANDLE KeyHandle,
int KeyInformationClass,
PVOID KeyInformation,
ULONG Length,
PULONG ResultLength);
NtQueryKeyType func = reinterpret_cast<NtQueryKeyType>(::GetProcAddress(dll, "NtQueryKey"));
if (func != NULL) {
DWORD size = 0;
DWORD result = 0;
result = func(key, 3, 0, 0, &size);
if (result == STATUS_BUFFER_TOO_SMALL)
{
size = size + 2;
wchar_t* buffer = new (std::nothrow) wchar_t[size/sizeof(wchar_t)]; // size is in bytes
if (buffer != NULL)
{
result = func(key, 3, buffer, size, &size);
if (result == STATUS_SUCCESS)
{
buffer[size / sizeof(wchar_t)] = L'\0';
keyPath = std::wstring(buffer + 2);
}
delete[] buffer;
}
}
}
FreeLibrary(dll);
}
}
return keyPath;
}
int _tmain(int argc, _TCHAR* argv[])
{
HKEY key = NULL;
LONG ret = ERROR_SUCCESS;
ret = RegOpenKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft", &key);
if (ret == ERROR_SUCCESS)
{
wprintf_s(L"Key path for %p is '%s'.", key, GetKeyPathFromKKEY(key).c_str());
RegCloseKey(key);
}
return 0;
}
Это напечатает путь ключа на консоли:
Ключевой путь для 00000FDC: '\ REGISTRY \ MACHINE \ SOFTWARE \ Microsoft'.
Номинально нет, потому что это всего лишь дескриптор, и я не знаю API, который позволил бы вам сделать это в обычных Windows API.
ОДНАКО у Native API есть множество функций, некоторые из которых который может дать вам дескрипторы, открытые для заданных файлов и тому подобное, так что может быть что-то подобное для реестра. Это и RegMon от SysInternals могут сделать что-то вроде этого, но, боюсь, вам придется использовать Google: /
. Вы можете использовать RegSaveKey и записать его в файл, а затем просмотреть файл.
В качестве альтернативы вы можете сохранить глобальную карту HKEY для LPCWSTR и добавлять записи, когда вы их открываете, и выполнять поиск в любое время.
Вы также можете что-то сделать с помощью команды! Reg в WinDBG / NTSD, но вы не можете просто дать ей HKEY. Вам придется проделать еще один трюк, чтобы получить от него нужную информацию.