亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? reg.c

?? Vitual Ring Routing 管你知不知道
?? C
字號:
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// (c) Microsoft Corporation. All rights reserved. 
//
// This file is part of the Microsoft Virtual Ring Routing distribution.
// You should have received a copy of the Microsoft Research Shared Source
// license agreement (MSR-SSLA) for this software; see the file "license.txt".
// If not, please see http://research.microsoft.com/vrr/license.htm,
// or write to Microsoft Research, One Microsoft Way, Redmond, WA 98052-6399.
//
// This file is derived from the Microsoft Research Mesh Connectivity Layer,
// available under the MSR-SSLA license, and downloadable from
// http://research.microsoft.com/mesh/.
//

#include "headers.h"
#include <string.h>
#include <wchar.h>

#define WORK_BUFFER_SIZE  512

//* OpenRegKey
//
//  Opens a Registry key and returns a handle to it.
//
//  Returns (plus other failure codes):
//      STATUS_OBJECT_NAME_NOT_FOUND
//      STATUS_SUCCESS
//
NTSTATUS
OpenRegKey(
    PHANDLE HandlePtr,  // Where to write the opened handle.
    HANDLE Parent,
    const WCHAR *KeyName,     // Name of Registry key to open.
    OpenRegKeyAction Action)
{
    NTSTATUS Status;
    OBJECT_ATTRIBUTES ObjectAttributes;
    UNICODE_STRING UKeyName;

    PAGED_CODE();

    RtlInitUnicodeString(&UKeyName, KeyName);

    memset(&ObjectAttributes, 0, sizeof(OBJECT_ATTRIBUTES));
    InitializeObjectAttributes(&ObjectAttributes, &UKeyName,
                               OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
                               Parent, NULL);

    switch (Action) {
    case OpenRegKeyRead:
        Status = ZwOpenKey(HandlePtr, KEY_READ, &ObjectAttributes);
        break;

    case OpenRegKeyCreate:
        Status = ZwCreateKey(HandlePtr, KEY_WRITE, &ObjectAttributes,
                             0,         // TitleIndex
                             NULL,      // Class
                             REG_OPTION_NON_VOLATILE,
                             NULL);     // Disposition
        break;

    case OpenRegKeyDeleting:
        Status = ZwOpenKey(HandlePtr, KEY_ALL_ACCESS, &ObjectAttributes);
        break;

    default:
        VRRASSERT(!"bad Action");
        Status = STATUS_INVALID_PARAMETER;
        break;
    }

    return Status;
}

//* GetRegDWORDValue
//
//  Reads a REG_DWORD value from the registry into the supplied variable.
//
NTSTATUS  // Returns: STATUS_SUCCESS or an appropriate failure code.
GetRegDWORDValue(
    HANDLE KeyHandle,  // Open handle to the parent key of the value to read.
    const WCHAR *ValueName,  // Name of the value to read.
    PULONG ValueData)  // Variable into which to read the data.
{
    NTSTATUS status;
    ULONG resultLength;
    PKEY_VALUE_FULL_INFORMATION keyValueFullInformation;
    UCHAR keybuf[WORK_BUFFER_SIZE];
    UNICODE_STRING UValueName;

    PAGED_CODE();

    RtlInitUnicodeString(&UValueName, ValueName);

    keyValueFullInformation = (PKEY_VALUE_FULL_INFORMATION)keybuf;
    RtlZeroMemory(keyValueFullInformation, sizeof(*keyValueFullInformation));

    status = ZwQueryValueKey(KeyHandle, &UValueName, KeyValueFullInformation,
                             keyValueFullInformation, WORK_BUFFER_SIZE,
                             &resultLength);

    if (NT_SUCCESS(status)) {
        if (keyValueFullInformation->Type != REG_DWORD) {
            status = STATUS_INVALID_PARAMETER_MIX;
        } else {
            *ValueData = *((ULONG UNALIGNED *)
                           ((PCHAR)keyValueFullInformation +
                            keyValueFullInformation->DataOffset));
        }
    }

    return status;
}

//* SetRegDWORDValue
//
//  Writes the contents of a variable to a REG_DWORD value.
//
NTSTATUS  // Returns: STATUS_SUCCESS or an appropriate failure code.
SetRegDWORDValue(
    HANDLE KeyHandle,  // Open handle to the parent key of the value to write.
    const WCHAR *ValueName,  // Name of the value to write.
    ULONG ValueData)  // Variable from which to write the data.
{
    NTSTATUS status;
    UNICODE_STRING UValueName;

    PAGED_CODE();

    RtlInitUnicodeString(&UValueName, ValueName);

    status = ZwSetValueKey(KeyHandle, &UValueName, 0, REG_DWORD,
                           &ValueData, sizeof ValueData);

    return status;
}

//* GetRegStringValue
//
//  Reads a REG_*_SZ string value from the Registry into the supplied
//  key value buffer.  If the buffer string buffer is not large enough,
//  it is reallocated.
//
NTSTATUS  // Returns: STATUS_SUCCESS or an appropriate failure code.
GetRegStringValue(
    HANDLE KeyHandle,   // Open handle to the parent key of the value to read.
    const WCHAR *ValueName,   // Name of the value to read.
    PKEY_VALUE_PARTIAL_INFORMATION *ValueData,  // Destination of read data.
    PUSHORT ValueSize)  // Size of the ValueData buffer.  Updated on output.
{
    NTSTATUS status;
    ULONG resultLength;
    UNICODE_STRING UValueName;

    PAGED_CODE();

    RtlInitUnicodeString(&UValueName, ValueName);

    status = ZwQueryValueKey(KeyHandle, &UValueName,
                             KeyValuePartialInformation, *ValueData,
                             (ULONG) *ValueSize, &resultLength);

    if ((status == STATUS_BUFFER_OVERFLOW) ||
        (status == STATUS_BUFFER_TOO_SMALL)) {
        PVOID temp;

        //
        // Free the old buffer and allocate a new one of the
        // appropriate size.
        //

        VRRASSERT(resultLength > (ULONG) *ValueSize);

        if (resultLength <= 0xFFFF) {

            temp = ExAllocatePool(NonPagedPool, resultLength);

            if (temp != NULL) {

                if (*ValueData != NULL) {
                    ExFreePool(*ValueData);
                }

                *ValueData = temp;
                *ValueSize = (USHORT) resultLength;

                status = ZwQueryValueKey(KeyHandle, &UValueName,
                                         KeyValuePartialInformation,
                                         *ValueData, *ValueSize,
                                         &resultLength);

                VRRASSERT((status != STATUS_BUFFER_OVERFLOW) &&
                       (status != STATUS_BUFFER_TOO_SMALL));
            } else {
                status = STATUS_INSUFFICIENT_RESOURCES;
            }
        } else {
            status = STATUS_BUFFER_TOO_SMALL;
        }
    }

    return status;
}

//* GetRegSZValue
//
//  Reads a REG_SZ string value from the Registry as a Unicode string,
//  allocating the string buffer.
//
//  Note that the caller must free the string buffer even
//  if this function returns a failure code.
//
NTSTATUS  // Returns: STATUS_SUCCESS or an appropriate failure code.
GetRegSZValue(
    HANDLE KeyHandle,  // Open handle to the parent key of the value to read.
    const WCHAR *ValueName,  // Name of the value to read.
    PUNICODE_STRING ValueData)  // Destination string for the value data.
{
    PKEY_VALUE_PARTIAL_INFORMATION keyValuePartialInformation;
    NTSTATUS status;

    PAGED_CODE();

    ValueData->Buffer = NULL;
    ValueData->MaximumLength = 0;
    ValueData->Length = 0;

    status = GetRegStringValue(KeyHandle, ValueName,
                               (PKEY_VALUE_PARTIAL_INFORMATION *)
                               &(ValueData->Buffer),
                               &(ValueData->MaximumLength));

    if (NT_SUCCESS(status)) {

        keyValuePartialInformation =
            (PKEY_VALUE_PARTIAL_INFORMATION)ValueData->Buffer;

        if (keyValuePartialInformation->Type == REG_SZ) {
            WCHAR *src;
            WCHAR *dst;
            ULONG dataLength;

            dataLength = keyValuePartialInformation->DataLength;
            VRRASSERT(dataLength <= ValueData->MaximumLength);

            dst = ValueData->Buffer;
            src = (PWCHAR) &(keyValuePartialInformation->Data);

            while (ValueData->Length <= dataLength) {

                if ((*dst++ = *src++) == UNICODE_NULL)
                    break;

                ValueData->Length += sizeof(WCHAR);
            }

            if (ValueData->Length < (ValueData->MaximumLength - 1)) {
                ValueData->Buffer[ValueData->Length/sizeof(WCHAR)] =
                    UNICODE_NULL;
            }
        } else {
            status = STATUS_INVALID_PARAMETER_MIX;
        }
    }

    return status;
}

//* GetVirtualAddress
//
//  Reads a VirtualAddress from a string.
//
boolint
GetVirtualAddress(const WCHAR *astr, VirtualAddress Address)
{
    uint Number;
    uint i;

    for (i = 0; ; i++) {
        if ((L'0' <= astr[0]) && (astr[0] <= L'9'))
            Number = astr[0] - L'0';
        else if ((L'a' <= astr[0]) && (astr[0] <= L'f'))
            Number = 10 + (astr[0] - L'a');
        else if ((L'A' <= astr[0]) && (astr[0] <= L'F'))
            Number = 10 + (astr[0] - L'A');
        else
            return FALSE;

        Number *= 16;

        if ((L'0' <= astr[1]) && (astr[1] <= L'9'))
            Number += astr[1] - L'0';
        else if ((L'a' <= astr[1]) && (astr[1] <= L'f'))
            Number += 10 + (astr[1] - L'a');
        else if ((L'A' <= astr[1]) && (astr[1] <= L'F'))
            Number += 10 + (astr[1] - L'A');
        else
            return FALSE;

        Address[i] = (uchar) Number;

        if (i == 5) {
            if (astr[2] != L'\0')
                return FALSE;
            break;
        }

        if (astr[2] != L'-')
            return FALSE;

        astr += 3;
    }

    return TRUE;
}

//* GetRegNetworkAddress
//
//  Reads a virtual address from the registry.
//
NTSTATUS  // Returns: STATUS_SUCCESS or an appropriate failure code.
GetRegNetworkAddress(
    HANDLE KeyHandle,  // Open handle to the parent key of the value to read.
    const WCHAR *ValueName,
    OUT VirtualAddress Address)
{
    UNICODE_STRING String;
    NTSTATUS Status;

    Status = GetRegSZValue(KeyHandle, ValueName, &String);
    if (NT_SUCCESS(Status)) {

        if (GetVirtualAddress(String.Buffer, Address))
            Status = STATUS_SUCCESS;
        else
            Status = STATUS_INVALID_PARAMETER;
    }

    if (String.Buffer != NULL)
        ExFreePool(String.Buffer);

    return Status;
}

//* SetRegNetworkAddress
//
//  Writes a network address to the registry.
//
NTSTATUS
SetRegNetworkAddress(
    HANDLE KeyHandle,  // Open handle to the parent key.
    const WCHAR *ValueName,
    IN VirtualAddress Address)
{
    UNICODE_STRING UValueName;
    WCHAR Buffer[6*3];

    RtlInitUnicodeString(&UValueName, ValueName);

    swprintf(Buffer, L"%02x-%02x-%02x-%02x-%02x-%02x",
             Address[0], Address[1], Address[2],
             Address[3], Address[4], Address[5]);

    //
    // The trailing zero is included in the value.
    //
    return ZwSetValueKey(KeyHandle, &UValueName, 0, REG_SZ,
                         Buffer, sizeof Buffer);
}

//* GetRegGuid
//
//  Reads a GUID from the registry.
//
NTSTATUS  // Returns: STATUS_SUCCESS or an appropriate failure code.
GetRegGuid(
    HANDLE KeyHandle,  // Open handle to the parent key of the value to read.
    const WCHAR *ValueName,
    OUT GUID *Guid)
{
    UNICODE_STRING String;
    NTSTATUS Status;

    Status = GetRegSZValue(KeyHandle, ValueName, &String);
    if (NT_SUCCESS(Status)) {

        Status = RtlGUIDFromString(&String, Guid);
    }

    if (String.Buffer != NULL)
        ExFreePool(String.Buffer);

    return Status;
}

//* GetRegBinaryValue
//
//  Reads a binary value from the registry into the supplied buffer.
//
NTSTATUS  // Returns: STATUS_SUCCESS or an appropriate failure code.
GetRegBinaryValue(
    HANDLE KeyHandle,  // Open handle to the parent key of the value to read.
    const WCHAR *ValueName,  // Name of the value to read.
    OUT uchar *Buffer,  // Buffer into which to read the data.
    uint Length)        // Length of the buffer.
{
    KEY_VALUE_PARTIAL_INFORMATION *Value;
    UCHAR valbuf[WORK_BUFFER_SIZE];
    UNICODE_STRING UValueName;
    ULONG ValueSize;
    NTSTATUS Status;

    PAGED_CODE();

    RtlInitUnicodeString(&UValueName, ValueName);

    Value = (KEY_VALUE_PARTIAL_INFORMATION *) valbuf;

    Status = ZwQueryValueKey(KeyHandle, &UValueName,
                             KeyValuePartialInformation,
                             Value, sizeof valbuf,
                             &ValueSize);
    if (NT_SUCCESS(Status)) {
        if ((Value->Type != REG_BINARY) ||
            (Value->DataLength != Length)) {
            Status = STATUS_INVALID_PARAMETER_MIX;
        }
        else {
            RtlCopyMemory(Buffer, Value->Data, Length);
            Status = STATUS_SUCCESS;
        }
    }

    return Status;
}

//* SetRegBinaryValue
//
//  Write a binary value into the registry from the supplied buffer.
//
NTSTATUS  // Returns: STATUS_SUCCESS or an appropriate failure code.
SetRegBinaryValue(
    HANDLE KeyHandle,  // Open handle to the parent key of the value to read.
    const WCHAR *ValueName,  // Name of the value to write.
    IN uchar *Buffer,  // Buffer from which to read the data.
    uint Length)        // Length of the buffer.
{
    UNICODE_STRING UValueName;
    NTSTATUS Status;

    PAGED_CODE();

    RtlInitUnicodeString(&UValueName, ValueName);

    Status = ZwSetValueKey(KeyHandle, &UValueName,
                           0, REG_BINARY,
                           Buffer, Length);

    return Status;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
大胆亚洲人体视频| 99久久亚洲一区二区三区青草| 亚洲欧美日韩中文播放 | 日韩精品一区二区三区视频| 日韩一区二区三区视频在线观看| 精品久久久久久久久久久院品网| 久久婷婷成人综合色| 亚洲成人www| 狠狠色狠狠色综合| 成人av资源站| 91精品国产综合久久香蕉的特点| 久久精品一区二区三区不卡| 中文字幕一区二区三区乱码在线| 石原莉奈在线亚洲二区| 国产在线视频精品一区| 久久婷婷国产综合国色天香| eeuss鲁片一区二区三区| 亚洲欧美另类图片小说| 国产美女在线观看一区| 2021久久国产精品不只是精品| 青青草精品视频| 国产亚洲福利社区一区| 免费在线观看一区| 黑人巨大精品欧美一区| 成人高清免费在线播放| 欧美精品日日鲁夜夜添| 精品国产青草久久久久福利| 久久这里只有精品6| 曰韩精品一区二区| 久久91精品国产91久久小草| 97久久精品人人爽人人爽蜜臀| 欧美四级电影在线观看| 国产午夜精品久久久久久久| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲成av人影院在线观看网| 国产乱人伦偷精品视频免下载 | 欧美日韩成人高清| 国产精品国产a| 91丨porny丨首页| 一区二区三区四区五区视频在线观看| 波多野结衣中文字幕一区二区三区| 久久这里都是精品| 成人精品免费视频| 亚洲日本免费电影| 欧美性猛交xxxx黑人交| 爽好久久久欧美精品| 日韩精品中文字幕在线不卡尤物| 毛片不卡一区二区| 国产精品久久久久久久久搜平片| 国产美女精品一区二区三区| 日韩美女视频一区二区| 欧美精选在线播放| 激情成人综合网| 亚洲欧美激情小说另类| 欧美日韩国产天堂| 国产91富婆露脸刺激对白| 亚洲私人黄色宅男| 精品福利一二区| 精品国产乱码久久久久久闺蜜| 日韩精品影音先锋| 成人午夜激情视频| 成人av手机在线观看| 91精品国产综合久久精品| 91国偷自产一区二区开放时间 | 欧美色综合影院| 成熟亚洲日本毛茸茸凸凹| 日本欧美在线看| 琪琪一区二区三区| 日韩成人免费在线| 麻豆精品视频在线观看免费| 日本不卡视频在线| 久久99精品久久久久婷婷| 久热成人在线视频| 久久综合狠狠综合久久综合88| 成人午夜激情影院| 亚洲国产成人av| 亚洲视频图片小说| 夜夜嗨av一区二区三区网页| 99麻豆久久久国产精品免费优播| 亚洲精品日韩一| 欧美三级视频在线播放| 午夜欧美在线一二页| 一区二区国产盗摄色噜噜| 欧美日韩国产成人在线免费| 国模大尺度一区二区三区| 天使萌一区二区三区免费观看| 欧美性三三影院| 成人av影院在线| 麻豆精品在线播放| 日韩成人伦理电影在线观看| 久久久国际精品| 成人综合婷婷国产精品久久免费| 亚洲特黄一级片| 亚洲国产高清在线观看视频| 国产乱码字幕精品高清av | 色拍拍在线精品视频8848| 国产三级精品在线| 国产亚洲综合色| 亚洲国产成人高清精品| 国产成人av电影| 欧美成人伊人久久综合网| 亚洲国产你懂的| 91小视频免费看| 欧美激情一区二区三区全黄| 麻豆视频观看网址久久| 欧美日韩国产综合一区二区三区| 亚洲人成在线观看一区二区| 国产精品国产三级国产aⅴ入口 | 精品日本一线二线三线不卡| 精品久久久久久亚洲综合网| 亚洲男女毛片无遮挡| 美国十次综合导航| 91精品久久久久久久99蜜桃| 精品成a人在线观看| 日韩欧美一区二区三区在线| 欧美一级久久久久久久大片| 欧美日本精品一区二区三区| 91蝌蚪porny成人天涯| 国产精品一级在线| 福利视频网站一区二区三区| 顶级嫩模精品视频在线看| 欧美人妖巨大在线| 亚洲靠逼com| 国产jizzjizz一区二区| 日韩精品自拍偷拍| 免费看欧美女人艹b| 欧美日韩日日摸| 亚洲欧美另类小说| 欧美专区在线观看一区| 天堂va蜜桃一区二区三区漫画版 | 国产乱理伦片在线观看夜一区| 777久久久精品| 久久电影国产免费久久电影 | 一区二区高清视频在线观看| www.综合网.com| ●精品国产综合乱码久久久久| 美女网站视频久久| 色噜噜狠狠色综合中国| 欧美精品少妇一区二区三区| 欧美视频日韩视频在线观看| 欧美日韩国产电影| 欧美成va人片在线观看| 无吗不卡中文字幕| 在线观看区一区二| 亚洲综合色自拍一区| 欧美一区二区三区喷汁尤物| 久久99久久99| 国产精品青草久久| 欧美日本在线观看| 狠狠色综合播放一区二区| 欧美成人一区二区三区片免费 | 国产片一区二区| 天天亚洲美女在线视频| 欧美伊人精品成人久久综合97| 亚洲精品精品亚洲| 欧美大片一区二区| 91免费看片在线观看| 青青草原综合久久大伊人精品| 久久久久国产精品麻豆ai换脸 | 26uuu另类欧美亚洲曰本| 国产制服丝袜一区| 一区二区三区免费看视频| 欧美电影免费观看高清完整版| 91在线视频播放| 国产一区二区不卡老阿姨| ㊣最新国产の精品bt伙计久久| 日韩精品一区二区三区在线| 欧美特级限制片免费在线观看| 国产成人亚洲综合a∨猫咪| 亚洲福利国产精品| 亚洲乱码日产精品bd| 久久久99久久| 欧美精品一区视频| www久久精品| 日韩色在线观看| 日韩欧美精品三级| 精品国产91九色蝌蚪| 91精品国产综合久久精品图片| 欧美精品第1页| 日韩一区二区免费在线观看| 欧美一级欧美三级在线观看| 欧美乱妇20p| 精品国产91洋老外米糕| 日韩久久久久久| 国产亚洲一区字幕| 久久久久久久久伊人| 亚洲欧洲国产日本综合| 亚洲综合激情小说| 人妖欧美一区二区| 成人午夜精品一区二区三区| 91影视在线播放| 欧美高清激情brazzers| 久久综合狠狠综合久久综合88 | 日韩高清不卡在线| 国产综合一区二区| 欧美少妇性性性| 国产亚洲一区字幕| 午夜日韩在线电影| 国产成人精品一区二| 欧美三级电影网|