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

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

?? strutils.c

?? 這個是一個開源項目, 有能力的人可以一起來寫
?? C
字號:
/*
 * $Id: strutils.c,v 1.3 2006/11/03 13:13:26 vfrolov Exp $
 *
 * Copyright (c) 2004-2006 Vyacheslav Frolov
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *
 * $Log: strutils.c,v $
 * Revision 1.3  2006/11/03 13:13:26  vfrolov
 * CopyStrW() now gets size in characters (not in bytes)
 *
 * Revision 1.2  2006/03/27 09:37:28  vfrolov
 * Added StrAppendDeviceProperty()
 *
 * Revision 1.1  2005/01/26 12:18:54  vfrolov
 * Initial revision
 *
 */

#include "precomp.h"
#include "strutils.h"

NTSTATUS CopyStrW(OUT PWCHAR pDestStr, IN LONG size, IN PWCHAR pStr)
{
  NTSTATUS status;
  LONG len;
  PWCHAR pStrTmp;

  pStrTmp = pStr;

  while (*(pStrTmp++))
    ;

  len = (LONG)(pStrTmp - pStr);

  if (len > size) {
    len = size;
    status = STATUS_BUFFER_TOO_SMALL;
  } else {
    status = STATUS_SUCCESS;
  }

  if (len > 0) {
    RtlCopyMemory(pDestStr, pStr, len * sizeof(WCHAR));
    pDestStr[len - 1] = 0;
  }

  return status;
}

NTSTATUS DupStrW(OUT PWCHAR *ppDestStr, IN PWCHAR pStr, IN BOOLEAN multiStr)
{
  PWCHAR pStrTmp = pStr;
  ULONG len;

  if (multiStr) {
    do {
      while (*(pStrTmp++))
        ;
    } while (*(pStrTmp++));
  }
  else {
    while (*(pStrTmp++))
      ;
  }

  len = (ULONG)(pStrTmp - pStr) * sizeof(WCHAR);
  pStrTmp = (PWCHAR)ExAllocatePool(PagedPool, len);

  if (!pStrTmp)
    return STATUS_INSUFFICIENT_RESOURCES;

  RtlCopyMemory(pStrTmp, pStr, len);
  *ppDestStr = pStrTmp;

  return STATUS_SUCCESS;
}

VOID StrFree(IN OUT PUNICODE_STRING  pDest)
{
  if (pDest->Buffer)
    ExFreePool(pDest->Buffer);
  RtlZeroMemory(pDest, sizeof(*pDest));
}

BOOLEAN StrFreeBad(NTSTATUS status, IN OUT PUNICODE_STRING  pDest)
{
  if (!NT_SUCCESS(status)) {
    StrFree(pDest);
    return TRUE;
  }
  return FALSE;
}


VOID StrAppendStr(
    PNTSTATUS pStatus,
    IN OUT PUNICODE_STRING  pDest,
    IN PWCHAR pSrc,
    IN USHORT lenSrc)
{
  UNICODE_STRING old;
  NTSTATUS status;

  status = *pStatus;

  if (!NT_SUCCESS(status) || !pSrc || !lenSrc)
    return;

  old = *pDest;

  RtlZeroMemory(pDest, sizeof(*pDest));

  pDest->MaximumLength = (USHORT)(old.Length + lenSrc);

  if (pDest->MaximumLength == (old.Length + lenSrc))
    pDest->Buffer = ExAllocatePool(PagedPool, pDest->MaximumLength + sizeof(WCHAR));

  if (pDest->Buffer) {
    RtlZeroMemory(pDest->Buffer, pDest->MaximumLength + sizeof(WCHAR));
    status = RtlAppendUnicodeStringToString(pDest, &old);
    if (NT_SUCCESS(status)) {
      PWCHAR pSrc0;

      pSrc0 = ExAllocatePool(PagedPool, lenSrc + sizeof(WCHAR));

      if (pSrc0) {
        RtlZeroMemory(pSrc0, lenSrc + sizeof(WCHAR));
        RtlCopyMemory(pSrc0, pSrc, lenSrc);

        status = RtlAppendUnicodeToString(pDest, pSrc0);

        ExFreePool(pSrc0);
      } else
        status = STATUS_INSUFFICIENT_RESOURCES;
    }
  } else
    status = STATUS_INSUFFICIENT_RESOURCES;

  StrFreeBad(status, pDest);

  if (old.Buffer)
    ExFreePool(old.Buffer);

  *pStatus = status;
}

VOID StrAppendStr0(PNTSTATUS pStatus, IN OUT PUNICODE_STRING  pDest, IN PWCHAR pSrc)
{
  StrAppendStr(pStatus, pDest, pSrc, (USHORT)(wcslen(pSrc) * sizeof(WCHAR)));
}

VOID StrAppendNum(
    PNTSTATUS pStatus,
    IN OUT PUNICODE_STRING pDest,
    IN ULONG num,
    IN ULONG base)
{
  UNICODE_STRING numStr;
  WCHAR numStrBuf[20];

  if (!NT_SUCCESS(*pStatus))
    return;

  RtlInitUnicodeString(&numStr, NULL);
  numStr.MaximumLength = sizeof(numStrBuf);
  numStr.Buffer = numStrBuf;
  *pStatus = RtlIntegerToUnicodeString(num, base, &numStr);

  if (StrFreeBad(*pStatus, pDest))
    return;

  StrAppendStr(pStatus, pDest, numStr.Buffer, numStr.Length);
}

VOID StrAppendDeviceProperty(
    IN OUT PNTSTATUS pStatus,
    IN OUT PUNICODE_STRING pDest,
    IN PDEVICE_OBJECT pDevObj,
    IN DEVICE_REGISTRY_PROPERTY deviceProperty)
{
  NTSTATUS status;
  ULONG len;

  status = *pStatus;

  if (!NT_SUCCESS(status))
    return;

  status = IoGetDeviceProperty(pDevObj,
                               deviceProperty,
                               0,
                               NULL,
                               &len);

  if (status == STATUS_BUFFER_TOO_SMALL && len) {
    PWCHAR pStrTmp;

    pStrTmp = (PWCHAR)ExAllocatePool(PagedPool, len);

    if (pStrTmp) {
      status = IoGetDeviceProperty(pDevObj,
                                   deviceProperty,
                                   len,
                                   pStrTmp,
                                   &len);

      if (NT_SUCCESS(status))
        StrAppendStr0(&status, pDest, pStrTmp);

      ExFreePool(pStrTmp);
    } else {
      status = STATUS_INSUFFICIENT_RESOURCES;
    }
  }

  StrFreeBad(status, pDest);

  *pStatus = status;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一二三级电影| 欧美色网一区二区| 色偷偷久久人人79超碰人人澡| 7777精品伊人久久久大香线蕉完整版| 精品国产乱码久久久久久牛牛| 亚洲视频每日更新| 久久爱www久久做| 日本韩国一区二区| 国产亚洲欧美日韩在线一区| 亚洲成av人片www| www.欧美日韩| 久久亚洲私人国产精品va媚药| 亚洲大片在线观看| 91老师国产黑色丝袜在线| 久久综合色婷婷| 美女国产一区二区三区| 欧美色手机在线观看| 亚洲女同一区二区| 成人永久免费视频| 久久影院视频免费| 精品一区二区在线免费观看| 欧美日韩极品在线观看一区| 一区二区三区国产| 在线亚洲人成电影网站色www| 国产精品蜜臀av| 成人听书哪个软件好| 久久久精品天堂| 国产iv一区二区三区| 久久新电视剧免费观看| 精品一区二区三区免费| 日韩一区二区免费高清| 日韩av中文字幕一区二区| 7777精品伊人久久久大香线蕉最新版 | 久久综合资源网| 经典三级在线一区| 日韩精品一区二区三区视频在线观看 | 国产精品电影院| 成人av午夜电影| 国产精品福利影院| 91蝌蚪国产九色| 亚洲青青青在线视频| 色综合久久久久久久| 亚洲另类春色校园小说| 色综合一区二区三区| 一区在线播放视频| 91国偷自产一区二区使用方法| 亚洲免费在线电影| 欧美日韩高清不卡| 免费美女久久99| 久久久综合视频| 99久久夜色精品国产网站| 亚洲日本在线观看| 欧美色大人视频| 麻豆国产欧美日韩综合精品二区 | 国产一区二区三区美女| 久久久蜜桃精品| 99国产精品久久久| 五月天久久比比资源色| 日韩精品一区二区三区视频| 国产成人精品影视| 亚洲激情图片一区| 精品国产三级电影在线观看| 成人性生交大合| 亚洲成av人片| 国产喷白浆一区二区三区| av福利精品导航| 午夜久久久久久电影| 久久精品视频在线看| 欧美在线视频日韩| 国产一区二区三区综合| 亚洲免费看黄网站| 2023国产精品| 欧美日韩久久久一区| 国产精品一线二线三线精华| 亚洲免费资源在线播放| 欧美不卡一区二区三区四区| 91麻豆免费视频| 精品一区二区三区免费| 亚洲综合小说图片| 亚洲国产精品精华液ab| 欧美日本在线看| av电影一区二区| 国产一区二区三区最好精华液| 亚洲一区二区黄色| 亚洲国产精品99久久久久久久久| 欧美日韩高清不卡| 91免费观看国产| 国产精品夜夜爽| 青青草国产精品97视觉盛宴| 国产精品网站导航| 精品国产欧美一区二区| 欧美日韩中文另类| 99精品欧美一区二区三区小说| 韩国三级电影一区二区| 图片区小说区国产精品视频| 亚洲人午夜精品天堂一二香蕉| 久久久精品欧美丰满| 制服丝袜一区二区三区| 91激情五月电影| 色综合久久99| av在线这里只有精品| 国产精品白丝av| 国产乱对白刺激视频不卡| 欧美96一区二区免费视频| 五月天视频一区| 亚洲成人av在线电影| 一区二区高清免费观看影视大全| 国产精品久久久久久久久免费樱桃 | 成人av在线电影| 国产一区二区三区免费在线观看| 免费观看91视频大全| 日日噜噜夜夜狠狠视频欧美人 | 久久色中文字幕| 日韩欧美黄色影院| 69堂成人精品免费视频| 欧美日韩国产首页| 欧美日韩1区2区| 91麻豆精品国产自产在线观看一区| 欧美少妇bbb| 欧美天堂一区二区三区| 欧美日韩精品一区二区三区蜜桃| 欧美综合色免费| 欧美日本免费一区二区三区| 51午夜精品国产| 欧美一区二区三区公司| 欧美v日韩v国产v| 久久蜜桃一区二区| 国产精品色呦呦| 亚洲精品高清视频在线观看| 亚洲无人区一区| 美日韩一级片在线观看| 狠狠色丁香婷综合久久| 韩国一区二区视频| 成人黄色国产精品网站大全在线免费观看 | www.亚洲在线| 日本福利一区二区| 日韩欧美一级在线播放| 久久亚洲春色中文字幕久久久| 国产欧美一区二区三区沐欲| 成人欧美一区二区三区小说| 一区二区三区在线观看国产| www.性欧美| 欧美视频一区二区在线观看| 6080午夜不卡| 中文一区二区完整视频在线观看| 亚洲伦在线观看| 日韩电影在线一区二区| 福利一区在线观看| 欧美日韩中文字幕一区| 久久精品视频在线免费观看| 亚洲制服丝袜一区| 国产中文字幕精品| 在线观看91视频| 久久久久9999亚洲精品| 亚洲午夜久久久久久久久久久| 另类专区欧美蜜桃臀第一页| av一区二区三区在线| 91精品在线一区二区| 欧美激情综合在线| 五月婷婷久久综合| 粉嫩av一区二区三区| 欧美男女性生活在线直播观看| 国产三级欧美三级| 五月婷婷综合在线| 99久久精品国产精品久久| 日韩一区二区三区在线| 亚洲男人都懂的| 国产精品一区二区黑丝| 欧美久久一二区| 中文字幕一区二区5566日韩| 久久国产精品露脸对白| 在线精品视频一区二区| 国产欧美视频一区二区三区| 日本欧美加勒比视频| 欧美主播一区二区三区| 国产农村妇女精品| 老司机免费视频一区二区三区| 在线免费观看视频一区| 中文字幕在线观看不卡| 国模一区二区三区白浆| 欧美日韩免费不卡视频一区二区三区| 久久久亚洲午夜电影| 九九九久久久精品| 91精品国产一区二区三区蜜臀| 一卡二卡欧美日韩| 91在线无精精品入口| 国产精品午夜在线| 国产精品1区2区3区在线观看| 日韩欧美一级在线播放| 日韩1区2区3区| 69久久99精品久久久久婷婷| 亚洲一卡二卡三卡四卡五卡| 欧洲精品在线观看| 亚洲视频在线一区观看| 97久久超碰国产精品| 国产精品不卡视频| 91亚洲国产成人精品一区二区三| 中文字幕精品一区二区精品绿巨人| 国产一区二区三区高清播放| 精品国产乱码久久久久久老虎 |