Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

100 lines
2.1 KiB

--
-- convert dec to hex string
--
CREATE PROCEDURE #Dec2hex
@stHex nvarchar(8) OUTPUT,
@iDec bigint
AS
DECLARE @iDigit int
SET @stHex = ""
IF @iDec < 0
SET @iDec = 0xFFFFFFFF + @iDec + 1
WHILE @iDec <> 0
BEGIN
SET @iDigit = @iDec % 16
SET @iDec = @iDec / 16
IF @iDigit < 10
SET @stHex = @stHex + CAST(@iDigit AS nvarchar(1))
ELSE
SET @stHex = @stHex + CHAR(ASCII('A') + @iDigit - 10)
END
SET @stHex = REVERSE(@stHex)
RETURN
GO
--
-- convert error code to winerror
--
CREATE PROCEDURE #Dec2Error
@iDec bigint,
@stHex nvarchar(8) OUTPUT,
@stError nvarchar (32) OUTPUT
AS
CREATE Table #CmdOutput
(
TEXT nvarchar(80)
)
EXEC #Dec2hex @stHex OUTPUT, @iDec
DECLARE @stCmdLine nvarchar(80)
SET @stCmdLine = "winerror"
DECLARE @bStatus bit
SET @bStatus = 0
IF @iDec < 0 AND @iDec > -1073741824
BEGIN
SET @bStatus = 1
SET @stCmdLine = @stCmdLine + " " + "-s"
END
SET @stCmdLine = @stCmdLine + " 0x" + @stHex
INSERT INTO #CmdOutput EXEC master.dbo.xp_cmdshell @stCmdLine
DECLARE @stText nvarchar (80)
DECLARE WinerrorCursor CURSOR FOR
SELECT TEXT FROM #CmdOutput
OPEN WinerrorCursor
FETCH NEXT FROM WinerrorCursor
INTO @stText
IF @@FETCH_STATUS = 0
BEGIN
SET @stText = LTRIM(@stText)
-- skip decimal value
DECLARE @iPos int, @iStart int
SET @iPos = CHARINDEX(" ", @stText, 0)
-- read in windows error text
SET @iStart = @iPos + 1
SET @iPos = CHARINDEX(" ", @stText, @iStart)
IF @bStatus = 0
SET @stError = SUBSTRING(@stText, @iStart, @iPos - @iStart)
-- skip '<-->'
SET @iStart = @iPos + 1
SET @iPos = CHARINDEX(" ", @stText, @iStart)
-- skip hex value
SET @iStart = @iPos + 1
SET @iPos = CHARINDEX(" ", @stText, @iStart)
-- read in ntstatus
SET @iStart = @iPos + 1
SET @iPos = LEN(@stText)
IF @bStatus = 1
SET @stError = SUBSTRING(@stText, @iStart, @iPos - @iStart + 1)
IF @stError = "No"
SET @stError = @stHex
END
GO