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.
|
|
--
-- 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
|